几个小时后我遇到了麻烦——想知道是否有新手开发人员可以查看下面的内容,代码已简化以显示问题。
我正在过滤对象数组的属性值,并使用具有匹配键和 bool 值的数组交叉引用该属性,以控制是否应将其纳入过滤器。
然而,尽管 console.log 似乎评估正确,但我的结果是返回所有 3 个对象。有什么想法吗?
非常感谢...
var data = [{
"id": 1,
"status": "new",
},
{
"id": 2,
"status": "rejected",
},
{
"id": 3,
"status": "changed",
}
];
var filter = {
"new": true,
"rejected": false,
"changed": true
}
var result = data.filter(function(item) {
var arr = [];
Object.keys(filter).forEach(function(key) {
if (item.status === key && filter[key] === true) {
console.log('---')
console.log('item.status', item.status)
console.log('key', key)
console.log('filter[key]', filter[key])
console.log('---')
arr.push(item);
}
});
return arr;
});
最佳答案
您正在使这比您需要的复杂一点。传递给 filter()
的函数应该返回一个 bool 值——您返回的是一个数组。
您可以简单地使用 filter
数组上的查找进行过滤,它将返回 false
或 undefined
,在这种情况下您可以过滤它out,或者 true
,在这种情况下你保留它..
var data = [{
"id": 1,
"status": "new",
},
{
"id": 2,
"status": "rejected",
},
{
"id": 3,
"status": "changed",
}
];
var filter = {
"new": true,
"rejected": false,
"changed": true
}
var result = data.filter(item => filter[item.status])
console.log(result)
关于javascript - 过滤对象数组,并在第二个数组上进行 foreach 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51014371/