我有以下数组:
人物列表
[ {id:1, name:"Brian", status:"active"}, {id:2, name:"Mary", status:"active"},
{id:3, name:"John", status:"pending"}, {id:4, name:"Steph", status:"pending"},
{id:5, name:"Peter", status:"inactive"}
]
状态列表
[ 'active', 'pending']
我想将对象数组过滤为仅 statusList,因此我执行了以下操作:
var filteredPeople =PeopleList.map(person => {
for (var i=0; i<=statusList.length; i++){
if(statusList[i] == person.active)
return {...person};
}
});
虽然 person 对象正确返回,但对于未通过条件语句的对象,我也会得到“未定义”。
所以我的结果是:
[object, object, object,object, undefined ]
如何才能在条件不通过的情况下从列表中删除该对象?
最佳答案
您应该使用filter
来代替map
来过滤数组。您还可以使用包含
。
var data = [ {id:1, name:"Brian", status:"active"}, {id:2, name:"Mary", status:"active"},
{id:3, name:"John", status:"pending"}, {id:4, name:"Steph", status:"pending"},
{id:5, name:"Peter", status:"inactive"}
]
var statusList = [ 'active', 'pending']
var result = data.filter(e => statusList.includes(e.status))
console.log(result)
对于 ES5 及更早版本,您可以使用 indexOf
而不是 includes
。
var data = [ {id:1, name:"Brian", status:"active"}, {id:2, name:"Mary", status:"active"},
{id:3, name:"John", status:"pending"}, {id:4, name:"Steph", status:"pending"},
{id:5, name:"Peter", status:"inactive"}
]
var statusList = [ 'active', 'pending']
var result = data.filter(function(e) {
return statusList.indexOf(e.status) != -1
})
console.log(result)
关于javascript - 在 Javascript/Lodash 中过滤对象数组中的多个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42413963/