过滤对象数组,并在第二个数组上进行 foreach 条件
Filter on array of objects, and foreach over second array for conditions
几个小时后我遇到了麻烦 -- 想知道是否有新手开发人员可以查看下面的内容,代码已简化以显示问题。
我正在过滤一个对象数组的 属性 值,并用一个具有匹配键的数组和布尔值交叉引用该 属性 以控制它是否应该被纳入过滤器。
但是我的结果是返回所有 3 个对象,尽管 console.log 似乎评估正确。有什么想法吗?
非常感谢...
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
通过直接返回真实或虚假的东西,而不是通过返回任何更具体的东西(比如一个对象)。您可以将代码简化为一行代码:
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);
你把这件事弄得比你需要的要复杂一些。传递给 filter()
的函数应该 return 一个布尔值——你正在 return 一个数组。
您可以简单地使用 filter
数组上的查找进行过滤,这将是 return false
或 undefined
,在这种情况下您可以将其过滤掉,或者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)
filter
将创建一个新数组,每个 item
返回一个真值。这应该有效:
var result = data.filter(function(item) {
return filter[item.status];
});
几个小时后我遇到了麻烦 -- 想知道是否有新手开发人员可以查看下面的内容,代码已简化以显示问题。
我正在过滤一个对象数组的 属性 值,并用一个具有匹配键的数组和布尔值交叉引用该 属性 以控制它是否应该被纳入过滤器。
但是我的结果是返回所有 3 个对象,尽管 console.log 似乎评估正确。有什么想法吗?
非常感谢...
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
通过直接返回真实或虚假的东西,而不是通过返回任何更具体的东西(比如一个对象)。您可以将代码简化为一行代码:
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);
你把这件事弄得比你需要的要复杂一些。传递给 filter()
的函数应该 return 一个布尔值——你正在 return 一个数组。
您可以简单地使用 filter
数组上的查找进行过滤,这将是 return false
或 undefined
,在这种情况下您可以将其过滤掉,或者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)
filter
将创建一个新数组,每个 item
返回一个真值。这应该有效:
var result = data.filter(function(item) {
return filter[item.status];
});