我有一个阵列&像这样的文字对象
var arr = [{a: 1}, {a: 2}, {a: 3}];
var e1 = {a: 1};
我想实现一个函数(例如:containsObject(e1, arr)
)在这种情况下应该返回true。
请教我不用覆盖Array.prototype.indexof
答案 0 :(得分: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;
}
}
答案 1 :(得分: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个不同的对象。它们是来自Object的2个实例,
答案 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);
由于数组不包含任何方法,因此我们可以使用stringify来比较对象。
答案 3 :(得分:-2)
这可能会对你有帮助。
function containsObject(e1, arr) {
var i;
for (i = 0; i < arr.length; i++) {
if (arr[i] === e1) {
return true;
}
}
return false;
}