for循环中的循环未正确应用

时间:2015-04-14 10:59:32

标签: javascript jquery arrays

我有2个数组,这些数组中包含对象值:

-VariantArry,里面有26个数组。

-ProductArray,其中有6个数组

现在每个人都有一个匹配的ID,例如ProductArray[1].Id = 10029 现在这可以在VariantArray中进行匹配,例如在VariantArray中有一些名为VariantArray[1].Product.Id的东西。

现在,如果匹配,我想将其推入具有ProductArray和VariantArray的数组中。现在一切正常我的问题是我最终得到的数组长度为23 ..我希望所有匹配的ID都在同一个数组中,所以我最终会得到6个数组,所有数据都具有与产品ID匹配的所有变体..目前为每个人创建一个新数组。

NewArray [1] .Product(保存我的产品数据)

NewArray [1] .Variant [6](将我的所有变种保存在另一个数组中)

Javascript代码:

                var NewArray = [];
                var p;
                var va;
                for (va = 0; va < VariantArray.length; va++) {
                    for (p = 0; p < ProductArray.length; p++) { 
                    if (ProductArray[p].Id == VariantArray[va].Product.Id)
                    {
                        NewArray.push({ Product: ProductArray[p], Variants: VariantArray[va] });
                    }
                    }
                }

有什么帮助以更好的方式使其正常工作? 谢谢 DOM

3 个答案:

答案 0 :(得分:0)

这可能有所帮助:

var NewArray = [];
            for (p = 0; p < ProductArray.length; p++) { 
               for (va = 0; va < VariantArray.length; va++) {
                if (ProductArray[p].Id == VariantArray[va].Product.Id)
                {
                    NewArray.push({ Product: ProductArray[p], Variants: VariantArray[va] });
                    break;
                }
                }
            }

将内循环放在外面,当找到id时将内部循环放入。

答案 1 :(得分:0)

这是一个更详细的代码,我在运行中编码。希望它对你的目的有用。

var NewArray = [];
for (var p = 0; p < ProductArray.length; p++) { 
    for (var va = 0; va < VariantArray.length; va++) {
        if (ProductArray[p].Id == VariantArray[va].Product.Id)
        {
            addVariant(NewArray, ProductArray[p], VariantArray[va]);
        }
    }
}

/**
* Finds the index of the product in the array
*/
function getProductIndex(array, productId) {
    for (var i = 0; i < array.length; i++) {
        if (array[i].Product.Id == productId) {
            return i;
        }
    }
    return -1;
}

/**
* Appends the variant if the product exists in the array. If not, it creates a new element for the given product and appends the variant.
*/
function addVariant(array, product, variant) {
    var index = getProductIndex(array, product.Id);
    if (index == -1) {
        var variants = [];
        variants.push(variant);
        array.push({Product: product, Variants: variants});
    }
    else {
        array[index].Variants.push(variant);
    }
}

答案 2 :(得分:0)

ProductArray.forEach(function (product) {
    results.push({
        product: product,
        variants: ProductArray.filter(function (variant) {
            return variant.productId == product.productId
        })
    })
})

示例:http://jsfiddle.net/60rk1219/ 注意:示例的代码略有不同,因为作者在保存小提琴后编辑了问题。

在您的代码中,您尝试将VariantArray的每个元素与ProductArray的每个元素进行匹配,并且对于您找到的每个匹配,您都会设置值NewArray。这样你就可以获得每场比赛的参赛作品。

要构建包含具有所有相应变体的每个产品的对象,您可以遍历ProductArray并在VariantArray中找到匹配的条目。