【问题标题】:How to filter an array of complex object如何过滤复杂对象的数组
【发布时间】:2021-11-05 10:49:18
【问题描述】:

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

【问题讨论】:

  • 你可以使用array#filter
  • 但是如何实现
  • 理想情况下,您的标签应该是 [1,3,5,7] 而不是 [{id:1},{id:3},{id:5},{id:7}]
  • 嗨 jarmod 我简化了这个问题的对象,用户中的标签也有其他属性,比如名称类别

标签: javascript arrays angular


【解决方案1】:

过滤用户,然后使用Array.some()检查用户标签中是否找到每个id

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);

【讨论】:

  • 谢谢 Ori,这正是我想要的
  • 嗨,Ori,我是这个平台的新手,我只是想知道为什么我会因为这个问题而受到反对,这是我做错了什么吗?
  • 你通常会因为没有展示你的尝试而被投反对票,即使它是部分的、不工作等......此外,如果这是一个被问和回答很多的规范问题,你可能会被投反对票时间(重复),因为有时它只是“人”。我建议阅读How do I ask a good question? 文章,不要把反对票当回事。
猜你喜欢
  • 2021-12-12
  • 1970-01-01
  • 1970-01-01
  • 2016-09-11
  • 2011-04-21
  • 2018-05-23
  • 1970-01-01
  • 1970-01-01
  • 2022-06-15
相关资源
最近更新 更多