arrays - 打字稿如何在已经在数组中的数组中查找?
问题描述
我想在数组中找到一个已经在数组中的值。
举一个我的数组的例子:
[
{
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 。但我认为存在比制作双循环更好的方法。
谢谢
解决方案
您可以在两个数组上执行 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 循环不返回任何内容。
推荐阅读
- android - React Native:迁移到 AndroidX
- node.js - 如何在多个 node.js 文件中设置全局模块
- amazon-web-services - AWS Lambda 中简单缓存的超时时间是多少?
- regex - 正则表达式与完整输入不匹配
- memory - RISC-V ISA 中的 FENCE.TSO 是什么意思?
- spring - spring boot rabbitmq连接重试配置
- html - 如何在 localhost(任何端口)上运行 html 文件
- python - 如何使用 Python 将 Azure Blob 存储中的大型 JSON 文件拆分为每个记录的单独文件?
- javascript - 即使首先定义了函数,函数也会显示未定义
- javascript - 如何将静态图片放在 Google 动态地图上?