JS使forEach匹配更有效

问题描述 投票:0回答:1

variants是对象的对象,selectedOptions是option1,option2,option3的对象。下面的forEachvariants中进行搜索以找到匹配项。

是否有使用数组方法或类似方法的更有效的方法来执行以下操作:

Object.values(variants).forEach(variant => {
    if (variant.options.option1 === selectedOptions.option1 && variant.options.option2 === selectedOptions.option2 && variant.options.option3 === selectedOptions.option3) {
        selectedVariant = variant.gid;
    }
});
javascript
1个回答
0
投票

[您要做的一件事是遍历所有变体,每次找到匹配项时都会覆盖selectedVariant。如果应该只进行一场比赛,那么在不再需要它时,您仍然可以访问所有其他变体。

更有效的是:

selectedVariant = Object.values(variants).find(variant => (
    variant.options.option1 === selectedOptions.option1 && 
    variant.options.option2 === selectedOptions.option2 &&
    variant.options.option3 === selectedOptions.option3
)).gid;

这样,一旦找到匹配项,您就会停止。

并且说实话,将一个变量设置为等于另一个变量的gid看起来是错误的。可以将您分配给selectedVariantGid的变量命名,也可以分配整个变量,然后在需要时使用.gid属性。明确的命名很重要。

© www.soinside.com 2019 - 2024. All rights reserved.