首页 > 解决方案 > 根据另一个列表中对象的属性过滤对象列表

问题描述

我有一个对象列表:

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"}]

标签: javascriptarrayslistsorting

解决方案


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

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

推荐阅读