如何确定一个对象是否只在一个数组中只有一个javascript属性?

时间:2013-05-05 12:00:01

标签: javascript

我有一个对象数组,每个对象都有一个名为'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');
}

我希望它显示'被叫'。

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

2 个答案:

答案 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){...}