【问题标题】:Filter an array where the values in the first array contain the values in the second array in typescript过滤一个数组,其中第一个数组中的值包含打字稿中第二个数组中的值
【发布时间】:2019-03-01 20:46:41
【问题描述】:

在打字稿中我有两个数组:

var StarWarsChars: any = [
      "Jedi Yoda",
      "Jedi Mace Windu",
      "Jedi Qui-Gon Jinn",
      "Jedi Qui-Gon Jinn",
      "Jedi Obi-Wan Kenobi",
      "Sith Count Dooku",
      "Sith Darth Sidious",
      "Droid R2-D2",
      "Droid R2-D2",
      "Droid C-3PO",
      "Droid BB-8"
    ];

var StarWarsFilter: any = ["Jedi", "Sith"];

我希望创建由 StarWarsChars 数组中的值组成的第三个数组,其中的值包含 StarWarsFilter 中的值。我知道如何过滤单个值:

var StarWarsFiltered = StarWarsChars.filter(e =>
      e.includes(StarWarsFilter[0])
    );

返回:

0: "Jedi Yoda"
1: "Jedi Mace Windu"
2: "Jedi Qui-Gon Jinn"
3: "Jedi Qui-Gon Jinn"
4: "Jedi Obi-Wan Kenobi"

但我不知道如何对 StarWarsFilter 中的所有值执行此过滤器。我可以尝试一个循环,但我想有更好的方法。

【问题讨论】:

    标签: arrays typescript filter


    【解决方案1】:

    首先我建议为您的数组使用正确的类型:string[]

    你应该能够做到以下几点:

    var StarWarsChars: string[] = [
      "Jedi Yoda",
      "Jedi Mace Windu",
      "Jedi Qui-Gon Jinn",
      "Jedi Qui-Gon Jinn",
      "Jedi Obi-Wan Kenobi",
      "Sith Count Dooku",
      "Sith Darth Sidious",
      "Droid R2-D2",
      "Droid R2-D2",
      "Droid C-3PO",
      "Droid BB-8"
    ];
    
    var StarWarsFilter: string[] = ["Jedi", "Sith"];
    
    var StarWarsFiltered = StarWarsChars.filter(e =>
          StarWarsFilter.some(f => e.includes(f))
    );
    

    【讨论】:

      【解决方案2】:

      const StarWarsFiltered = StarWarsChars.filter(x => x.split(' ').some(y => StarWarsFilter.includes(y)));

      这将返回 StarWarsChars 中包含 StarWarsFilter 中的单词的所有项目

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-22
        • 1970-01-01
        • 2010-12-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-22
        • 2022-01-09
        相关资源
        最近更新 更多