我试图找出值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。
第二个console.log
返回false
,在这种情况下,roomTypeFilter
存在于我想要返回的对象中,并且#39; true&#39;但我不确定该怎么做,任何帮助都将不胜感激。
答案 0 :(得分:1)
不使用includes
,而是使用hasOwnProperty
。有关hasOwnProperty
的更多信息,请查看here。它的名称非常明显 - 它本质上返回一个关于对象是否具有属性的布尔值。即,在您的情况下,您将使用:
arr[0].hasOwnProperty('roomTypeFilter');
答案 1 :(得分:1)
您可以使用hasOwnProperty方法检查对象是否包含roomTypeFilter
属性。
...
if (this[i].hasOwnProperty(k)) {
...
}
...
答案 2 :(得分:1)
您可以重构includes
函数以使用
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'))