javascript - 双重迭代的角度替代方案
问题描述
我正在使用两个对象数组,并且需要两个列表中的数据才能正确构建“制造商列表”下拉列表,特别是材料垫扩展面板。在前端使用 javascript 和 Angular 7。
第一个是所有制造商的主列表,像这样:[{id: "56lkj456", label: "ABC Manufacturer"}]
该列表中可以有多达 1200 个上述对象。此列表在初始应用加载时生成一次。
第二个列表是基于用户搜索条件的较小的制造商列表,如下所示:[{id: "56lkj456", facets: 11}]
这个列表可以有 200 个左右的项目。第二个列表是我感兴趣的,但我还需要获取制造商的名称(在第一个列表中)。
目前,我正在使用 ul li *ngFor="let manufacturer of manufacturerList" ... 遍历 html 文件中的主制造商列表。
在想我可以在 li 上有一个 *ngIf 来调用一个函数,该函数将遍历第二个列表,并且仅在 id 匹配时才显示制造商(即,如果用户搜索产生的制造商与 master 中的制造商匹配列表)。
对我来说似乎有很多计算,都是为了得到名字。想知道是否有人有任何想法来避免这种双重迭代,除了更改后端调用:-)
我的一个想法是从第一个列表中制作一个字典,其中 id 是键,这样在我的 *ngIf 中我可以从该字典中挑选出制造商,而不是遍历。
非常感谢
解决方案
您可以使用数组查找来代替字典。
function findManufacturer(mID) {
return manufacturerList.find(item => item.id === mID);
}
如果 ID 匹配,这将返回制造商对象,如果未找到 ID,则返回 undefined。
推荐阅读
- flutter - 将元数据附加到 Dart/Flutter 中的文件
- c++ - 不确定如何在 C++ 中舍入整数
- python - python中的边缘情况和文本格式
- automated-tests - Cypress Retries:如何获取测试中的重试次数
- javascript - 用 JavaScript 覆盖文本框语音到文本
- javascript - Boostrap 侧边栏父菜单链接未显示子菜单
- tensorflow - Loss Nan:如何正确实现具有大量参数的 LSTM 时间序列模型?
- java - 除了 jar 之外,避免在 Jetty 中进行类路径类扫描
- c# - 跳过不使用 DynamicMethod 的动态生成方法的可见性检查
- c# - 如何在 XAML 中格式化此字符串?