通过字符串数组筛选对象数组

filtering an array of objects by an array of strings

本文关键字:数组 筛选 对象 字符串      更新时间:2023-09-26

我正在用以下代码筛选对象数组:

  filterCategory(category: [string]) {
    this.projects = this.projects.filter(project => project.category == category);
  }

它可以在一定程度上工作,但我想改进它,以便它将返回任何包含类别字符串的对象。

project: [{
    name: "thing1"
    category: ["Design", "Web Design"]
  }, {
    name: "thing2"
    category: ["Web Design"]
  }, {
    name: "thing3"
    category: ["Design"]
  }, {
    name: "thing4"
    category: ["Design", "Web Design"]
  }]
filterCategory("Design")

filterCategory设计目前只会返回thing3,但我希望它返回thing1, thing3和thing4。

JavaScript的数组。indexOf将查看每个数组值是否匹配。

project => project.category.indexOf(category) !== -1

project => {
    for (let i = 0; i < project.category.length; i++) {
        if (project.category[i] === category) {
            return true;
        }
    }
    return false;
}

我在ES6中找到了另一种(更少的代码)方法来做到这一点。您可以使用代替project => project.category.indexOf(category) !== -1。包含来做同样的事情,所以最终代码看起来像这样:

project => project.category.includes(category)

对我来说也是一样的,如果你使用的是ES6的话,效果会更简洁一些。