首页 > 解决方案 > 打字稿如何在已经在数组中的数组中查找?

问题描述

我想在数组中找到一个已经在数组中的值。

举一个我的数组的例子:

[
    {
        ConcessionId: 1,
        ConcessionName: "Coyotes",
        KnownAs: [
          {
            TeamId: 1,
            Name: "Arizona Coyotes",
          },
          {
            TeamId: 2,
            Name: "Phoenix Coyotes",
          }
        ]
    },
    {
        ConcessionId: 2,
        ConcessionName: "Devils",
        KnownAs: [
          {
            TeamId: 3,
            Name: "Colorado Rockies",
          },
          {
            TeamId: 4,
            Name: "New-Jersey Devils",
          }
        ]
    }
]

我想要的是当我调用我的函数时,它会返回我的团队名称。例如,我的参数值为3,我想要Colorado Rockies作为名字:

public getInfo(_TeamID) { 
    const concession: ConcessionInfo[] =  this.concessionList$.filter(function (x) {
      x.KnownAs.filter( (y)=> {
          y.TeamId= +_TeamID;
          return y.Name;
      })
    })

}

我用过滤器尝试了很多不同的方式。但永远得不到好东西。从不工作。

我可以为每个数组制作一个双 .foreach 。但我认为存在比制作双循环更好的方法。

谢谢

标签: arraystypescriptfilterfind

解决方案


您可以在两个数组上执行 forEach ,而不是使用 filter 方法(实际上它的工作原理类似于 for 循环)。对于您当前的数据结构,没有其他方法可以解决它。

getInfo = (_TeamID) => {
  let teamName = '';
  this.concessionList$.forEach(entry => {
    entry.KnownAs.forEach(team => {
      if(team.TeamId === _TeamID){
        teamName = team.Name;
        return; // break the loop.
      }
    })
  });
  return teamName;
}

这是一个工作示例

https://stackblitz.com/edit/double-for-lopp

编辑如果您从 Mozilla https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter看一下过滤器的 polyfill 实现,它相当于原生实现filter,你可以看到它正在循环整个数组,和 forEach 循环一样。不同之处在于 filter 方法将根据回调函数内部的布尔条件返回一个新数组,而 forEach 循环不返回任何内容。


推荐阅读