Programming

특정 배열 인덱스에 값이 있는지 JavaScript를 어떻게 확인합니까?

procodes 2020. 2. 11. 22:43
반응형

특정 배열 인덱스에 값이 있는지 JavaScript를 어떻게 확인합니까?


"index"위치의 값이 존재하는지 또는 더 나은 방법이 있는지 테스트하는 데 도움이됩니까?

if(arrayName[index]==""){
     // do stuff
}

JavaScript의 모든 배열에는 까지 array.length시작하는 요소가 포함 됩니다. 정의에 의하면, 인덱스 어레이 소자 경우 어레이의 일부라고 사이 포괄적.array[0]array[array.length - 1]ii0array.length - 1

즉, JavaScript 배열은 0부터 시작하여 최대 값까지 선형이며, 배열에는 배열에서 특정 값이나 범위를 제외시키는 메커니즘이 없습니다. 주어진 위치 인덱스 (값이 0 또는 양의 정수)에 값이 있는지 확인하려면 문자 그대로

if (index < array.length) {
  // do stuff
}

그러나 어떤 배열의 값이되도록 가능한 NULL, undefined, NaN, Infinity, 다른 값이 0, 또는 전체 호스트. 예를 들어 array.length속성 을 증가시켜 배열 값을 추가 하면 새 값이됩니다 undefined.

주어진 값이 의미가 있는지 또는 정의되었는지 확인 , 또는 아닙니다 .undefinednull

if (typeof array[index] !== 'undefined') {

또는

if (typeof array[index] !== 'undefined' && array[index] !== null) {

흥미롭게도 JavaScript의 비교 규칙으로 인해 마지막 예제는 다음과 같이 최적화 될 수 있습니다.

if (array[index] != null) {
  // The == and != operators consider null equal to only null or undefined
}  

우리는 이것을 할 수 없습니다 :

if(arrayName.length > 0){   
    //or **if(arrayName.length)**
    //this array is not empty 
}else{
   //this array is empty
}

사용하는 .length것은 안전하지 않으며 일부 브라우저에서 오류가 발생합니다. 더 나은 해결책은 다음과 같습니다.

if(array && array.length){   
   // not empty 
} else {
   // empty
}

또는 다음을 사용할 수 있습니다.

Object.keys(__array__).length

if(!arrayName[index]){
     // do stuff
}

if(arrayName.length > index && arrayName[index] !== null) {
    //arrayName[index] has a value
}

짧고 보편적 인 접근

거짓, 정의되지 않은, null 또는 빈 문자열과 같이 잘못된 값이 있는지 배열을 확인하려면 다음과 같이 every () 메서드를 사용할 수 있습니다 .

array.every(function(element) {return !!element;}); // returns true or false

예를 들면 다음과 같습니다.

['23', null, 2, {key: 'value'}].every(function(element) {return !!element;}); // returns false

['23', '', 2, {key: 'value'}].every(function(element) {return !!element;}); // returns false

['23', true, 2, {key: 'value'}].every(function(element) {return !!element;}); // returns true

허위 가치의 첫 번째 색인을 가져와야 할 경우 다음과 같이 할 수 있습니다.

let falsyIndex; 

if(!['23', true, 2, null, {key: 'value'}].every(function(element, index) {falsyIndex = index; return !!element;})) {
  console.log(falsyIndex);
} // logs 3

주어진 인덱스에 대해 잘못된 배열 값을 확인 해야하는 경우 다음과 같이 할 수 있습니다.

if (!!array[index]) {
  // array[index] is a correct value
}
else {
  // array[index] is a falsy value
}

if(typeof arr ==='object' && arr instanceof Array ){
   if(!arr.length){
      println 'empty'
   }else{
      printn 'not Empty'
   }

}else{
   println 'Null'
}

'Null'-> 요소가 null이거나 ''과 같은 경우이 경우 : 모든 'null'요소를 필터링 한 후 배열이 비어 있는지 확인하십시오.

if(!arr.clean().length){return 'is null'}

물론, 전에 깨끗한 방법을 추가하십시오 :

Array.prototype.clean=function(){return this.filter(function(e){return (typeof  e !=='undefined')&&(e!= null)&&(e!='')})}

다음과 같은 함수를 만드는 것이 좋습니다.

function isEmptyEl(array, i) {
   return !(array[i]);
}

다음과 같이 호출 할 수 있습니다.

if (isEmptyEl(arrayName, indexVal)) {
   console.log('arrayName[' + indexVal + '] is empty');
}

개발자가 isEmptyEl 인터페이스를 준수하게하면 정의되지 않은 arrayName 또는 indexVal 변수와 같은 입력 오류가 발생합니다.

일반적으로 Javascript로 프로그래밍 할 때는 방어 적으로 프로그래밍하는 것이 좋습니다.

arrayName이 정의되지 않은 경우 다음과 같은 오류가 발생합니다.

Uncaught ReferenceError: arrayName is not defined
    at <anonymous>:2:15
    at Object.InjectedScript._evaluateOn (<anonymous>:895:140)
    at Object.InjectedScript._evaluateAndWrap (<anonymous>:828:34)
    at Object.InjectedScript.evaluate (<anonymous>:694:21)

정의되지 않은 indexVal에 대한 비슷한 결과.

배열 또는 인덱스 값이 없으면 오류가 발생합니다.

유효한 입력의 경우 arrayName [indexVal]이 다음 중 하나 일 경우에만 true를 얻습니다.

  • 없는
  • 찾으시는 주소가 없습니다
  • NaN
  • 빈 문자열
  • 0
  • 그릇된

"빈"의 의미에 따라 다릅니다.

해당 이름의 속성이없는 객체에서 속성 값을 얻으려고하면 value가 표시 undefined됩니다.

그것이 희소 배열에서 일어나는 것입니다 : 0사이에있는 모든 지수는 아닙니다 array.length-1.

그래서 당신은 여부를 확인할 수 array[index] === undefined있습니다.

그러나 속성 indexundefined값으로 존재할 수 있습니다 . 이 경우를 필터링 하려면 객체에 JavaScript의 속성이 있는지 어떻게 확인합니까?에 설명 된대로 in연산자 또는를 사용할 수 있습니다 .hasOwnProperty

index in array;
array.hasOwnProperty(index);

당신이 가진 기존 특성을 고려하려는 경우 undefined또는 null존재하지 가치를, 당신은 느슨한 비교를 사용할 수 있습니다 array[index] == undefined또는 array[index] == null.

배열이 희박하지 않다는 것을 알고 있다면와 비교할 수 index있습니다 array.length. 그러나 안전을 위해 index실제로 배열 인덱스 인지 확인하고 싶을 수도 있습니다. 속성 이름이 배열 인덱스인지 확인을 참조 하십시오.


자, 배열 값이 JavaScript에 존재하지 않으면 어떻게 될지 먼저 보자. 아래와 같이 배열이 있다면 :

const arr = [1, 2, 3, 4, 5];

이제 6 이 인덱스 5에 있는지 여부를 확인합니다 .

arr[5];

그리고 우리는 undefined...

따라서 기본적으로 대답을 제공 합니다. 정의되지 않은 경우 확인 하는 가장 좋은 방법 은 다음과 같습니다.

if("undefined" === typeof arrayName[index]) {
  //array value is not there...
}

경우이 작업을 수행 하지 않는 것이 좋습니다 .

if(!arrayName[index]) {
  //Don't check like this..
}

이 배열이 있다고 상상해보십시오.

const arr = [0, 1, 2];

그리고 우리는 :

if(!arr[0]) {
  //This get passed, because in JavaScript 0 is falsy
}

보시다시피, 0 조차도 인식되지 않으며, 똑같이 할 수있는 다른 것들이 거의 없으며 응용 프로그램을 버그로 만들 수 있으므로 조심스럽게 나열하십시오.

  1. undefined : 값이 정의되어 있지 않은 경우undefined
  2. null : null의 경우, 예를 들어 DOM 요소가 존재하지 않는 경우
  3. 빈 문자열 :''
  4. 0 : 숫자 0
  5. NaN : 숫자가 아님
  6. 그릇된

array [index]가 null이면 이것을 시도하십시오

if (array[index] != null) 

Lodash를 사용하면 다음을 수행 할 수 있습니다.

if(_.has(req,'documents')){
      if (req.documents.length)
      _.forEach(req.documents, function(document){
        records.push(document);
      });
} else {
}

if(_.has(req,'documents'))요청 객체에 이름이 지정된 속성이 있는지 확인 documents하고 해당 소품이있는 경우 다음 if (req.documents.length)은 빈 배열이 아닌지 유효성을 검사하여 다른 것들을 진행할 forEach수 있습니다.


정의되지 않았거나 삭제되었는지 확인하려면 다음을 수행하십시오.

if(typeof arrayName[index]==="undefined"){
     //the index is not in the array
}

또한 일부 색인을 삭제 한 연관 배열 및 배열과 함께 작동합니다.

정의되지 않았는지, 삭제되었는지 확인하거나 널 또는 논리 빈 값 (NaN, 빈 문자열, 거짓)입니다.

if(typeof arrayName[index]==="undefined"||arrayName[index]){
     //the index is not defined or the value an empty value
}

라 라벨 데이터 테이블을 사용 하여이 문제에 부딪 쳤습니다. properties활동 로그에 호출 JSON 값을 저장하고 있었고이 값 을 기반으로 버튼이 비어 있는지 여부를 표시하려고했습니다.

글쎄, datatables는 이것을 비어 있으면 배열로 해석하고 그렇지 않은 경우 객체로 해석했기 때문에 다음 해결책이 효과적이었습니다.

render: function (data, type, full) {
    if (full.properties.length !== 0) {
        // do stuff
    }
}

객체에는 길이 속성이 없습니다.


나는 몇 가지 놓친 것 같은 것을 지적하고 싶다. 즉, 배열 중간에 "빈"배열 위치를 가질 수있다. 다음을 고려하세요:

let arr = [0, 1, 2, 3, 4, 5]

delete arr[3]

console.log(arr)      // [0, 1, 2, empty, 4, 5]

console.log(arr[3])   // undefined

자연스럽게 확인하는 방법은 배열 멤버가 정의되어 있지 않은지 확인하는 것입니다. 다른 방법이 있는지 확실하지 않습니다.

if (arr[index] === undefined) {
  // member does not exist
}

이 결정은 명령형 OOP 또는 절차 적보다 선언적 기능 프로그래밍을 선호하는 사람들에게 적합하다고 생각합니다. 질문에 " 내부에 값이 있습니까? (진실하거나 허위 값)"인 경우 .some방법을 사용 하여 값을 확인할 수 있습니다 .

[].some(el => el || !el);
  • 완벽하지는 않지만 같은 논리를 포함하는 추가 기능을 적용 할 필요는 없습니다 function isEmpty(arr) { ... }.
  • 아직보다 더 좋은 소리 "는 길이 제로인가?" 우리가 수행 할 때 [].length결과 만들어진을로 0하는 경우에 위험하다.
  • 심지어이 [].length > 0말은 "0보다 그 길이가 큰가요?"

고급 예 :

[    ].some(el => el || !el); // false
[null].some(el => el || !el); // true
[1, 3].some(el => el || !el); // true

Loadsh 라이브러리를 사용하여 다음과 같이보다 효율적으로 수행 할 수 있습니다.

"pets"라는 이름의 배열이있는 경우

var pets = ['dog', undefined, 'cat', null];

console.log(_.isEmpty(pets[1])); // true
console.log(_.isEmpty(pets[3])); // true
console.log(_.isEmpty(pets[4])); // false

_.map( pets, (pet, index) => { console.log(index + ': ' + _.isEmpty(pet) ) });

널값 또는 정의되지 않은 값에 대한 모든 배열 값을 확인하려면 다음을 수행하십시오.

var pets = ['dog', undefined, 'cat', null];

console.log(_.isEmpty(pets[1])); // true
console.log(_.isEmpty(pets[3])); // true
console.log(_.isEmpty(pets[4])); // false

_.map( pets, (pet, index) => { console.log(index + ': ' + _.isEmpty(pet) ) });
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>

http://underscorejs.org/ 에서 더 많은 예제를 확인하십시오.

참고 URL : https://stackoverflow.com/questions/2672380/how-do-i-check-in-javascript-if-a-value-exists-at-a-certain-array-index



반응형