2012-11-03 88 views
5

我在javascript中有一個對象數組。一些與此類似:如何查找對象是否存在於數組中javascript

var objectArray = [ 
     { "Name" : "A", "Id" : "1" }, 
     { "Name" : "B", "Id" : "2" }, 
     { "Name" : "C", "Id" : "3" }, 
     { "Name" : "D", "Id" : "4" } 
    ]; 

現在我試圖找出是否有一個給定的屬性Name值的對象數組在內置功能通過存在或不喜歡inArrayindexOf等。也就是說,如果我只是一個有字符串C比這是可能的,以檢查是否與屬性名稱C obejct存在於數組中或與使用內置函數像indexOf,inArray等?

+0

檢查了這一點: - http://stackoverflow.com/questions/4587061/how-to-determine-if-object-is-in-array –

+0

你怎麼能實現這與jQuery的inArray? – agDev

回答

7

而不是使用指數,類似於從拉胡爾·帕蒂的評論鏈接的答案,我會使用修改後的版本拉該對象按名稱而不是傳遞整個對象。

function pluckByName(inArr, name, exists) 
{ 
    for (i = 0; i < inArr.length; i++) 
    { 
     if (inArr[i].name == name) 
     { 
      return (exists === true) ? true : inArr[i]; 
     } 
    } 
} 

使用

// Find whether object exists in the array 
var a = pluckByName(objectArray, 'A', true); 

// Pluck the object from the array 
var b = pluckByName(objectArray, 'B'); 
1

你可以嘗試:

objectArray.indexOf({ "Name" : "C", "Id" : "3" }); 

一個更好的方法是簡單地在陣列上迭代,但如果必須使用的indexOf,這是你會怎麼做。

迭代方法看起來像:

var inArray = false; 
for(var i=0;i<objectArray.length;i++){ 
    if(objectArray[i]["Name"] == "C"){ 
     inArray = true; 
    } 
} 
6
var found = $.map(objectArray, function(val) { 
    if(val.Name == 'C') alert('found'); 
});​ 

Demo

0

好吧,如果對象不是太大,可以考慮迭代和匹配,以尋找是否特定對象存在如下圖所示:

//The Object 
var objectArray = [ 
    { "Name" : "A", "Id" : "1" }, 
    { "Name" : "B", "Id" : "2" }, 
    { "Name" : "C", "Id" : "3" }, 
    { "Name" : "D", "Id" : "4" } 
]; 


//Function to check if object exist with the given properties 
function checkIfObjectExist(name,id) 
{ 
for(var i=0;i<objectArray.length;i++) 
{ 
    if(objectArray[i].Name===name && objectArray[i].Id===id) 
    {  
     return true; 
    } 
}  
} 

// Test if function is working 
console.log(checkIfObjectExist("B","2")); 
相關問題