javascript에 배열 요소가 있는지 확인하는 방법은 무엇입니까?


198

티타늄으로 작업하고 있는데 코드는 다음과 같습니다.

var currentData = new Array();

if(currentData[index]!==""||currentData[index]!==null||currentData[index]!=='null')
{
    Ti.API.info("is exists  " + currentData[index]);
    return true;
}
else
{   
    return false;
}

배열에 인덱스를 전달하고 currentData있습니다. 위의 코드를 사용하여 존재하지 않는 요소를 여전히 감지 할 수 없습니다.


1
당신의 논리가 잘못되었습니다. &&개별 조건 사이에 연결 ( ) 이 필요 합니다.
JK

답변:


382

사용하다 typeof arrayName[index] === 'undefined'

if(typeof arrayName[index] === 'undefined') {
    // does not exist
}
else {
    // does exist
}

4
+1, 좋습니다. if(arrayName[index] === 'undefined')바로 가기로 사용할 수도 있습니다
AnchovyLegend

67
@AnchovyLegend 아니오, 당신은 할 수 없습니다! 하지만 당신은 사용할 수 있습니다 if(arrayName[index] === undefined).
Denis V

18
항목이 있으면 값이 정의되지 않습니다. 대신이 답변을 사용하십시오-> stackoverflow.com/questions/1098040/…
Matus

@Matus가 말했듯이 여기에 더 많은 설명 이 있습니다.
S.Thiongane

1
if (arrayName [index] === undefined)에 대해 if (! arrayName [index])보다 짧은 것을 사용할 수 있습니다
Park JongBum

84
var myArray = ["Banana", "Orange", "Apple", "Mango"];

if (myArray.indexOf(searchTerm) === -1) {
  console.log("element doesn't exist");
}
else {
  console.log("element found");
}

2
불행히도, 이것은 IE 7 이하에서는 작동하지 않습니다.
darksoulsong

4
내 의견으로는 이것이 최선의 대답이며, 이제 IE 7은 더 이상 유지 관리되지 않으므로 문제가되지 않습니다. 비록 트리플 if(myArray.indexOf(searchTerm) === -1)
이퀄라이저

2
OP는 주어진 인덱스 번호가 있는지 확인하려고했습니다 . 주어진 이 존재 하는지 확인 합니다.
jonathan.s

6

내가 틀렸다면 누군가 나를 수정하십시오. 그러나 AFAIK 는 다음과 같습니다.

  1. 배열은 실제로 JS의 후드 아래에있는 객체입니다.
  2. 따라서 그들은 hasOwnProperty"상속 된" 프로토 타입 방법 을Object
  3. 내 테스트 hasOwnProperty에서 배열 인덱스에 어떤 것이 있는지 확인할 수 있습니다.

따라서 위의 내용이 사실이라면 간단하게 다음을 수행 할 수 있습니다.

const arrayHasIndex = (array, index) => Array.isArray(array) && array.hasOwnProperty(index);

용법:

arrayHasIndex([1,2,3,4],4); 출력 : false

arrayHasIndex([1,2,3,4],2); 출력 : true


이것은 또한 배열의 정의되지 않은 null 값에 대해서도 작동하며 다른 대답은 없습니다.
Jake Thakur

MDN에서 확인 : "객체가 배열 인 경우 hasOwnProperty 메소드는 색인이 있는지 여부를 확인할 수 있습니다." developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Loren

3

techfoobar의 답변을 try.. catch블록 에 래핑 해야했습니다.

try {
  if(typeof arrayName[index] == 'undefined') {
    // does not exist
  }
  else {
  // does exist
  }
} 
catch (error){ /* ignore */ }

... 어쨌든 크롬에서 작동하는 방식입니다 (그렇지 않으면 코드가 오류와 함께 중단되었습니다).


변수 arrayName자체 (또는 index)가 존재하지 않으면 오류가있는 "깨진"상태 여야 합니다. 정의되지 않은 배열 요소에 액세스하는 것만으로 "오류"가 발생하지 않아야합니까?
MrWhite

3

배열의 요소가 간단한 객체 또는 배열 인 경우 일부 기능을 사용할 수 있습니다 .

// search object
var element = { item:'book', title:'javasrcipt'};

[{ item:'handbook', title:'c++'}, { item:'book', title:'javasrcipt'}].some(function(el){
    if( el.item === element.item && el.title === element.title ){
        return true; 
     } 
});

[['handbook', 'c++'], ['book', 'javasrcipt']].some(function(el){
    if(el[0] == element.item && el[1] == element.title){
        return true;
    }
});

some여기 가장 현대적인 방법입니다. 그것은 또한 하나의 라이너가 될 수도 있습니다myArray.some(el => el.item === element.item && el.title === element.title)
vahdet

2

배열 a를 고려하십시오.

var a ={'name1':1, 'name2':2}

'name1'이 존재하는지 확인하려면 다음을 사용하여 테스트하십시오 in.

if('name1' in a){
console.log('name1 exists in a')
}else
console.log('name1 is not in a')

5
"var a"는 귀하의 경우 배열 객체가 아니라 일반 객체입니다. var a = [...] 여야합니다. 저자가 필요하다고 생각합니다.
tomazahlin

3
이것은 배열에 인덱스가 아닌 객체에 키가 있는지 확인하는 방법입니다.
벤 헐

2

var fruits = ["Banana", "Orange", "Apple", "Mango"];
if(fruits.indexOf("Banana") == -1){
    console.log('item not exist')
} else {
	console.log('item exist')
}


1

underscore.js 를 사용하는 경우 이러한 유형의 null 및 정의되지 않은 검사는 라이브러리에 의해 숨겨집니다.

따라서 코드는 다음과 같습니다.

var currentData = new Array();

if (_.isEmpty(currentData)) return false;

Ti.API.info("is exists  " + currentData[index]);

return true;

훨씬 더 읽기 쉽게 보입니다.


당신의 대답이 옳더라도, 나는 이것을 두 번 생각할 것입니다. 빈 값을 확인하는 경우에만 코드가 underscore.js에 종속됩니다. 간단한 래퍼 함수를 ​​수행하십시오. isset (v) {return (typeof v! == 'undefined'); }
Heroselohim

1

항목을 확인하는 간단한 방법 존재 여부

Array.prototype.contains = function(obj) {
    var i = this.length;
    while (i--)
       if (this[i] == obj)
       return true;
    return false;
}

var myArray= ["Banana", "Orange", "Apple", "Mango"];

myArray.contains("Apple")

3
끔찍하게 비효율적입니다. 내가 설정하면 myArray[1000000] = 'Pear'기능이 영원히 걸릴 것입니다.
John Henckel

1

이 방법은 내 생각에 가장 쉬운 방법입니다.

var nameList = new Array('item1','item2','item3','item4');

// Using for loop to loop through each item to check if item exist.

for (var i = 0; i < nameList.length; i++) {
if (nameList[i] === 'item1') 
{   
   alert('Value exist');
}else{
   alert('Value doesn\'t exist');
}

그리고 어쩌면 그것을 할 수있는 또 다른 방법입니다.

nameList.forEach(function(ItemList)
 {
   if(ItemList.name == 'item1')
        {
          alert('Item Exist');
        }
 }

1
var demoArray = ['A','B','C','D'];
var ArrayIndexValue = 2;
if(ArrayIndexValue in demoArray){
   //Array index exists
}else{
   //Array Index does not Exists
}

당신은 무엇을 기대하고 있습니까? 실제로 질문은 무엇입니까?
Geeky

1

이 같은 것을 찾고 있다면.

다음은 발췌 문장입니다

var demoArray = ['A','B','C','D'];
var ArrayIndexValue = 2;
if(demoArray.includes(ArrayIndexValue)){
alert("value exists");
   //Array index exists
}else{
alert("does not exist");
   //Array Index does not Exists
}


이것이 오늘 내 프로젝트에서 사용할 솔루션입니다. 다운 보트가 왜 있는지 전혀 모르겠습니다. 이것은 서버 측 node.js / express 인 유스 케이스에 가장 적합합니다. 감사합니다
mkrufky

@mkrufky이 질문에 대한 것이 아니기 때문입니다. 우리는 Array.includes값이 같은 배열인지 확인 하기 전에 오랫동안 기능을 가지고있었습니다 demoArray.indexOf(ArrayIndexValue) !== -1. 이 질문은 인덱스가 배열에 존재하는지 확인하는 것입니다. 이것은 완전히 다른 문제입니다
r3wt

0

당신은 단순히 이것을 사용할 수 있습니다 :

var tmp = ['a', 'b'];
index = 3 ;
if( tmp[index]){
    console.log(tmp[index] + '\n');
}else{
    console.log(' does not exist');
}

3
잘못된. 무엇을하면 tmp = [0,0,0,0]다음 tmp를 [3] 존재한다
존 헨켈

0
(typeof files[1] === undefined)?
            this.props.upload({file: files}):
            this.props.postMultipleUpload({file: files widgetIndex: 0, id})

어레이의 두 번째 항목 사용 미정되어 있는지 확인 typeof하고 확인undefined


0

JS에 배열 인덱스가 있는지 확인하려고 할 때 가장 쉽고 짧은 방법은 이중 부정을 사용하는 것입니다.

let a = [];
a[1] = 'foo';
console.log(!!a[0])   // false
console.log(!!a[1])   // true

0

이것이 바로 in운영자를위한 것입니다. 다음과 같이 사용하십시오.

if (index in currentData) 
{ 
    Ti.API.info(index + " exists: " + currentData[index]);
}

허용 대답은 의 값이있는 경우 잘못, 그것은 거짓 부정을 줄 것 index입니다 undefined:

const currentData = ['a', undefined], index = 1;

if (index in currentData) {
  console.info('exists');
}
// ...vs...
if (typeof currentData[index] !== 'undefined') {
  console.info('exists');
} else {
  console.info('does not exist'); // incorrect!
}


0
const arr = []

typeof arr[0] // "undefined"

arr[0] // undefined

부울 식인 경우

typeof arr[0] !== typeof undefined

true이면 0은 arr에 포함됩니다.


0

또한에 대해 유형별로 테스트하여 정상적으로 작동합니다 undefined.

if (currentData[index] === undefined){return}

테스트:

const fruits = ["Banana", "Orange", "Apple", "Mango"];

if (fruits["Raspberry"] === undefined){
  console.log("No Raspberry entry in fruits!")
}

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.