0

我有一个对象数组,每个对象都有一个名为“完成”的属性和其他属性。我想要做的是仅通过比较除“完成”属性之外的属性来确定对象是否在该数组中。

它的工作原理是:

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');
}

我希望它显示“调用”。

有什么办法可以做到吗?请帮我。

4

2 回答 2

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 语句中表达式的长度来推动我们的运气,并且将内容拉到函数中会更容易阅读

于 2013-05-05T12:04:24.253 回答
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){...}
于 2013-05-05T12:25:46.213 回答