javascript - 如何过滤复杂对象的数组
问题描述
我有一个用户数组,每个用户都有一个标签数组,我有一个选定标签数组 ES6 中按选定标签过滤用户的最佳方法是什么
const users = [
{
username: "john",
tags: [{id:1}, {id:3},{id:5},{id:7}]
},
{
username: "becky",
tags: [{id:1}, {id:7},{id:6}]
},
{
username: "susy",
tags: [{id:1}, {id:4},{id:5}]
},
{
username: "tyson",
tags: [{id:3},{id:5}]
},
];
我选择的标签是
let tagIds = [7,5];
我希望收到一个结果
users = [
{
username: "john",
tags: [{id:1}, {id:3},{id:5},{id:7}]
},
];
解决方案
过滤用户,然后使用以下命令检查是否id
在用户的标签中找到了每个Array.some()
:
const users = [{"username":"john","tags":[{"id":1},{"id":3},{"id":5},{"id":7}]},{"username":"becky","tags":[{"id":1},{"id":7},{"id":6}]},{"username":"susy","tags":[{"id":1},{"id":4},{"id":5}]},{"username":"tyson","tags":[{"id":3},{"id":5}]}];
const tagIds = [7,5];
const result = users.filter(({ tags }) =>
tagIds.every(id =>
tags.some(t => t.id === id)
)
);
console.log(result);
推荐阅读
- reactjs - wordpress 可以做复杂的事情,比如反应吗?
- javascript - Express 和 mongoose 应用程序在一条路线低于另一条路线时出现错误 404,但在其上方时有效
- c# - 更改excel折线图中系列的颜色
- javascript - 我的 React 应用程序中有按钮和教科书,如何使单击按钮触发文本输入?
- java - Java 静态方法与验证器中的单例
- django - Jinja TemplateSyntaxError 与集合
- c - 避免在文件末尾添加新行
- laravel - Laravel中两个日期之间的差异
- html - 如何将焦点框的宽度限制为网页上文本的长度
- javascript - 仅更改覆盖图像的颜色而不是整个画布 Fabricjs