查找对象中的值是否存在于数组中

时间:2016-08-17 13:07:18

标签: javascript jquery arrays object javascript-objects

我试图找出值roomTypeFilter是否存在于数组内的Object中。然后我想根据值roomTypeFilter是否存在来执行条件语句。

以下是我的代码

function includes(k) {
    for (var i = 0; i < this.length; i++) {
        if (this[i] === k || (this[i] !== this[i] && k !== k)) {
            return true;
        }
    }
    return false;

}
var dayValue = this.ui.dayConstraintList.val();
var arr = [courseTemplate.get('dayConstraints')[dayValue]];
console.log(arr);
arr.includes = includes;
console.log(arr.includes('roomTypeFilter'));

第一个console.log返回一个数组内的Object。

Object inside Array

第二个console.log返回false,在这种情况下,roomTypeFilter存在于我想要返回的对象中,并且#39; true&#39;但我不确定该怎么做,任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:1)

不使用includes,而是使用hasOwnProperty。有关hasOwnProperty的更多信息,请查看here。它的名称非常明显 - 它本质上返回一个关于对象是否具有属性的布尔值。即,在您的情况下,您将使用:

arr[0].hasOwnProperty('roomTypeFilter');

答案 1 :(得分:1)

您可以使用hasOwnProperty方法检查对象是否包含roomTypeFilter属性。

...
if (this[i].hasOwnProperty(k)) {
    ...
}
...

答案 2 :(得分:1)

您可以重构includes函数以使用

  

array.prototype.some

     

some()为数组中的每个元素执行一次回调函数,直到找到一个回调返回truthy值的元素...如果找到这样的元素,some()会立即返回true。 EM>

这是一个例子。

var arr = [
  {
    roomTypeFilter: {
      name: 'foo'
    }
  },
  ["roomTypeFilter", "foo"],
  "roomTypeFilter foo"
]

function includes(arr, k) {
  return arr.some(function(item) {
    return item === Object(item) && item.hasOwnProperty(k);
  })
}

console.log("Does arr includes roomTypeFilter ? - ", includes(arr, 'roomTypeFilter'))