2016-04-27 65 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); 

由于阵列不包含任何方法,因此我们可以使用串化来比较对象。

相关问题