【问题标题】:Filter list of objects based on property of objects in another list根据另一个列表中对象的属性过滤对象列表
【发布时间】:2021-08-10 12:35:45
【问题描述】:

我有一个对象列表:

let data = [{... , user: "user 1"}, {... , user: "user 1"}, {... , user: "user 1"}, {... , user: "user 2"}, {... , user: "user 2"}]

我有另一个包含一些对象的列表,其中包含有关用户的信息以及它是否被选中

let filter = [{user: "user 1", selected: true}, {user: "user 2", selected: false}]

如何获取另一个数组,该数组仅包含第一个列表中的对象,这些对象的用户属性在过滤器列表中的对象已选择属性设置为 true? 使用上述列表的结果示例如下:

let data = [{... , user: "user 1"}, {... , user: "user 1"}, {... , user: "user 1"}]

【问题讨论】:

  • 提示:使用Array.filter()方法,使用Array.find()

标签: javascript arrays list sorting


【解决方案1】:

您可以创建一个对象或Map,将每个user 映射到它的selected 属性。然后filter使用map对象的数组:

const filterMap = new Map(filter.map(o => [o.user, o.selected]))
const output = data.filter(d => filterMap.get(d.user))

【讨论】:

  • 代替.reduce(),也可以直接使用地图构造函数new Map(filter.map(o => [o.user, o.selected]))。由于 map 构造函数还接受一个可迭代的 a generator function 可以避免中间数组。
猜你喜欢
  • 2023-03-12
  • 2017-10-18
  • 2013-07-05
  • 1970-01-01
  • 2011-11-26
  • 1970-01-01
  • 2021-12-05
  • 2013-06-25
  • 1970-01-01
相关资源
最近更新 更多