2016-04-27 30 views
2

我有一個數組&文字對象這樣如何檢查文本對象是一個Javascript數組

var arr = [{a: 1}, {a: 2}, {a: 3}]; 
var e1 = {a: 1}; 

我想要實現的功能(例如:containsObject(e1, arr))我應該在這種情況下返回true。

請告訴我的方式沒有壓倒一切的基礎類Array.prototype.indexof

+0

'containsObject'應該以這樣一種方式實現,即你還可以傳遞'key'在'base-array'中進行測試 – Rayon

+0

http://stackoverflow.com/questions/8217419/how-to-determine-if- javascript-array-contains-object –

+0

http://stackoverflow.com/questions/7364150/find-object-by-id-in-an-array-of-javascript-objects – Bergi

回答

2

試試這個:

var arr = [{a: 1}, {a: 2}, {a: 3}]; 
 
var e1 = {a: 1}; 
 
for (var i=0; i<arr.length; i++) { 
 
    var found = true; 
 
    for (var key in e1) { 
 
    if (e1[key] != arr[i][key]) { 
 
     found = false; 
 
     break; 
 
    } 
 
    } 
 
    if (found) { 
 
    alert('found at index ' + i); 
 
    break; 
 
    } 
 
}

+0

謝謝jcubic。 –

-2

這可能會幫助你。

function containsObject(e1, arr) { 
    var i; 
    for (i = 0; i < arr.length; i++) { 
     if (arr[i] === e1) { 
      return true; 
     } 
    } 

    return false; 
} 
+2

這不適用於對象'{a:10}!= {a:10}' – jcubic

+0

您無法通過運算符'=' ==' –

2
 var arr = [{a: 1}, {a: 2}, {a: 3}]; 
var e1 = {a: 1}; 
function containsObject(e1, arr) { 
    var i; 
    for (i = 0; i < arr.length; i++) { 
     if (JSON.stringify(arr[i]) === JSON.stringify(e1)) { 
      alert("we found it") 
     }else{ 
      alert(JSON.stringify(e1)+"not equal to"+JSON.stringify(arr[i])) 
     } 
    } 
} 
containsObject(e1, arr) 

,如果你不介意的字符串對比一下,用這種方式。 JSON.stringify()將對象轉換爲json字符串,我認爲你期望在人類視覺中比較它們,那就是它。

我不認爲2個不同的對象可以是compared.they從對象2例,

+0

感謝Ma Yubo。我們保存一個循環,但我可以信任函數JSON.stringify。有沒有什麼情況JSON.stringify會有什麼問題? –

+0

還不知道,JSON.stringify應該可以用於任何對象 –

+0

是的,我知道函數JSON.stringify。我只是考慮在什麼情況下,這種方式是錯誤的(還沒有找到)。我更喜歡你的方式並使用它,jcubic的方式是正確的。我想過了,但我害怕2循環:)再次感謝 –

0

這可能會幫助你

function containsObject(e1, arr) 
    { 
     var k=false; 
     ap=arr.filter(function(a){ 
     if(JSON.stringify(a) === JSON.stringify(e1)) 
     {k=true; 
     return(true);} 
    }); 
    (k===true)?console.log("in array"):console.log("not in array"); 
    } 
var arr = [{a: 1}, {a: 2}, {a: 3}]; 
var e1 = {a: 1}; 
containsObject(e1,arr); 

由於陣列不包含任何方法,因此我們可以使用串化來比較對象。

相關問題