我有一个对象数组,每个对象都有一个名为'done'的属性,以及其他属性。 我想要做的是仅通过比较除“完成”属性之外的属性来确定对象是否在该数组中。
它起作用:
var my_array = [
{'done': false, 'name': 'do homework'},
{'done': true, 'name': 'buy some food'}
];
var my_object = {'done': true, 'name': 'do homework'};
if(someFunction(my_arry, my_object)){
window.alret('called');
}
我希望它显示'被叫'。
有什么方法可以做到吗?请帮我。
答案 0 :(得分:3)
这是一种使用匹配名称在数组中查找对象的方法:
if(my_array.some(function(x) { return x.name == my_object.name; })) {
alert("called")
}
如果您想比较所有属性:
if(my_array.some(function(x) {
return Object.keys(x).every(function(k) {
return k == 'done' || x[k] == my_object[k];
});
})) {
alert("called")
}
虽然这有点推动我们在if语句中使用表达式的长度来运气,并且更容易阅读带有函数的东西
答案 1 :(得分:0)
这是Array.filter的简单示例:
var my_array = ...;
var my_object = ...;
var done = my_array.filter(function(e){
for(var opt in my_object) {
if(opt != 'done') if(!e[opt]||!e[opt]!=my_object[opt]) return false;
}
return true;
})
if(done.length){...}