javascript - 如果我需要根据 javascript 中的条件更新 pin,我的代码可以提高效率吗?
问题描述
我有一个变量 AllPackages,它是一个对象数组。如果 dp.product.code 与对象的 dealProducts 产品代码匹配,我想在 AllPackages 中的所有对象中获取所有相同的产品并使用 selectedPIN 更新它们的 pin。
setProductPinOnAllPackages(dp): void {
let AllPackages = [{"dealProducts":[{"pin":"","product":{"id":"100","code":"AAA","name":"AAA"}},{"pin":"","product":{"id":"200","code":"BBB","name":"BBB"}}]},{"dealProducts":[{"pin":"","product":{"id":"300","code":"CCC","name":"CCC"}},{"pin":"","product":{"id":"200","code":"BBB","name":"BBB"}},{"pin":"","product":{"id":"400","code":"DDD","name":"DDD"}},{"pin":"","product":{"id":"100","code":"AAA","name":"AAA"}}]}];;
let selectedPIN = dp.pin;
//Can this be made more efficient ????
AllPackages.filter(pkg => pkg.dealProducts
.filter(pkgDealProduct => pkgDealProduct.product.code === dp.product.code)
.map(data => data.pin = selectedPIN));
}
解决方案
您可以通过不构造不必要的中间数组来提高效率 - 您的目标是执行副作用(改变data
),而不是从 构造过滤数组AllPackages
,因此请使用通用迭代方法,例如forEach
orfor..of
而不是.filter
在外部循环中.
同样,不要使用.map
,因为您不希望映射到新数组 - 同样,您正在寻找副作用,因此请使用通用迭代方法。
您也可以code
只从参数中提取一次,而不是每次迭代。
const { code, pin } = dp.product;
for (const pkg of AllPackages) {
pkg.dealProducts
.filter(pkgDealProduct => pkgDealProduct.product.code === code)
.forEach((data) => {
data.pin = pin;
});
}
推荐阅读
- javascript - 保存用户从动态添加的字段中的多个输入
- java - 分别运行 Lagom Service Locator / Kafka / Cassandra
- c - 如何在 ARMv8 32 位上生成地址大小错误?
- html - 我在容器背景和前景中有 2 个图像。如何使前景图像响应
- function - LISP 编写一个名为 cut-in-half 的函数,它接收一个列表并创建一个新列表,其元素是前半部分和后半部分
- php - Laravel 5.7,雄辩:此集合实例上不存在属性 [X],多对多关系
- ios - 绘制半径等于手指路径的圆
- ruby-on-rails - Zeitwerk,require_dependency 并将 Ruby 类拆分为几个文件
- excel - excel,合并静态列和数字列表之间的两列
- asciidoc - 链接到 asciidoc 中同一页面的部分