首页 > 解决方案 > 如果我需要根据 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));
}

标签: javascript

解决方案


您可以通过不构造不必要的中间数组来提高效率 - 您的目标是执行副作用(改变data),而不是从 构造过滤数组AllPackages,因此请使用通用迭代方法,例如forEachorfor..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;
        });
}

推荐阅读