javascript - 在 Javascript/Lodash 中过滤对象数组中的多个字段

标签 javascript arrays object lodash

我有以下数组:

人物列表

[ {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/

相关文章:

javascript - 使用 Selenium JavaScript 上传图片

PhpStorm 使用双制表符格式化多行数组

Javascript 对象,在 C 中制作类似

javascript - HTTP 状态 404 打开 HTML 页面时请求的资源不可用

javascript - 在开发期间在特定 IP 地址上运行 sails.js

arrays - 全局定义一个数组,但其参数稍后可用

java - 研究对象和类

javascript - 为什么它推送参数名称而不是元素? JavaScript

javascript - jQuery 插件中的私有(private)变量

arrays - 与 AD 中的职位列表匹配的用户列表