首页 > 解决方案 > 如何过滤复杂对象的数组

问题描述

我有一个用户数组,每个用户都有一个标签数组,我有一个选定标签数组 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}]
  },
];

标签: javascriptarraysangular

解决方案


过滤用户,然后使用以下命令检查是否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);


推荐阅读