2012-10-28 36 views
116

我與鈦的工作,如何檢查數組元素是否存在或不在JavaScript中?

我的代碼看起來像如,

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

你的邏輯是錯誤的。你需要在各個條件之間進行連接('&&')。 –

回答

200

使用typeof arrayName[index] === 'undefined'

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

+1,很好。你也可以使用'if(arrayName [index] ==='undefined')'作爲快捷鍵 – AnchovyLegend

+44

@AnchovyLegend不,你不能!但是你可以使用'if(arrayName [index] === undefined)'。 –

+10

這會失敗,如果該項目在那裏,但它的值是未定義的;使用這個答案,而不是 - > http:// stackoverflow。com/questions/1098040 /檢查,如果數組鍵存在於一個JavaScript對象或數組 – Matus

2

我不得不換techfoobar的回答在try .. catch塊,像這樣:

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

...這就是它在Chrome是如何工作的,反正(否則,停止代碼有錯誤)。

58
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

+2

這在我看來是最好的答案,到目前爲止IE 7不再維護,所以這不是問題。雖然我會建議使用三倍等於if(myArray.indexOf(searchTerm)=== -1)' –

1

如果使用underscore.js那麼這些類型null和undefined檢查都是由庫藏。

所以,你的代碼看起來就像這樣 -

var currentData = new Array(); 

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

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

return true; 

它看起來更可讀了。

+0

即使您的答案是正確的,我也會爲此考慮三次。您的代碼將變爲underscore.js,僅用於檢查空值。只需做一個簡單的包裝函數isset(v){return(typeof v!=='undefined'); } – Heroselohim

2

如果陣列的元件也簡單對象或者陣列,則可以使用some功能:

// 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; 
    } 
}); 
2

可以簡單地使用這樣的:

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

考慮陣列的:

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

如果你想檢查'name1'是否存在於a中,只需測試它與in

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

「var a」不是你的情況下的數組對象,而是一個常規對象。應該是var a = [...]。我認爲這是作者需要的。 – tomazahlin

+0

這是如何檢查對象中是否存在鍵,而不是數組中是否存在索引。 – Beejamin

3

這種方式在我看來是最簡單的。

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'); 
     } 
} 
2

檢查項目簡單的方式存在或不

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") 
相關問題