循环通过2个数组javascript

时间:2014-12-17 18:43:00

标签: javascript jquery arrays for-loop foreach

我需要一些帮助来使功能正常工作。让我解释几个部分,以便在我向您展示目前的功能之前了解这个问题。

请注意:传入的所有数据都不用担心我的问题是关于循环我在下面说明的数据并使其正常工作。当这个函数命中时,所有内容都已传入。

我有2个数组,其中包含数据,其中一个名为Variants(),它总是包含6个Variants,它们都有唯一的ID,另一个叫做ProductRequests()。 Variants拥有我的所有Variants和ProductRequests包含所有选择的变体,这可以从1到6不等所以它一直到他们选择的,但他们必须选择至少一个..无论他们选择什么,总会有一个匹配与Variants()数组ID进行比较时。

这些都保存彼此匹配的ID以及数量,我想要做的是循环变量和产品请求查找是否有任何ID匹配,然后如果它们匹配来自ProductRequests的数量覆盖来自的数量该产品ID的变体。我已经完成了下面的第二部分,但有点需要写得好多了。

我所做的是我编写了一个函数(没有任何循环)来比较它们的ID,但我的问题有时取决于用户在数组中选择的内容与数组上的数字不匹配,例如ProductRequests ProductRequests可能只有1个项目,但只匹配Variant等中的ID的Variant()[5]。所以这种硬编码的方式不起作用..(好吧它可以,但它将是一个可怕的混乱代码。)

function Compare(){
        var OldVariants = Variants();
        var RequestVariants = ProductRequests();
        var One = OldVariants[0].Id;
        var Two = OldVariants[1].Id;
        var Three = OldVariants[2].Id;
        var Four = OldVariants[3].Id;
        var Five = OldVariants[4].Id;
        var Six = OldVariants[5].Id;

        if (One == RequestVariants[0].Id)
        {OldVariants[0].Quantity(RequestVariants[0].Quantity)}
        if (Two == RequestVariants[1].Id)
        {OldVariants[1].Quantity(RequestVariants[1].Quantity)}
        if (Three == RequestVariants[2].Id)
        {OldVariants[2].Quantity(RequestVariants[2].Quantity)}
        if (Four == RequestVariants[3].Id)
        {OldVariants[3].Quantity(RequestVariants[3].Quantity)}
        if (Five == RequestVariants[4].Id)
        {OldVariants[4].Quantity(RequestVariants[4].Quantity)}
        if (Six == RequestVariants[5].Id)
        {OldVariants[5].Quantity(RequestVariants[5].Quantity)}
        }

这个功能有效,但就像我上面说的那样,如果用户没有按顺序选择ProductRequests,则ID不匹配意味着值不会过期。

任何建议或帮助都会很棒。

1 个答案:

答案 0 :(得分:0)

如果您的目标是更新OldVariants中与Id中的条目具有相同RequestVariants的条目,请使用Quantity调用Quantity方法所请求变体的属性,那么你需要一个循环循环:

function Compare(){
    var OldVariants = Variants();
    var RequestVariants = ProductRequests();

    RequestVariants.forEach(function(req) {
        OldVariants.some(function(variant) {
            if (variant.Id == req.Id) {
                variant.Quantity(req.Quantity);
                return true; // Stops the inner loop
            }
        });
    });
}

...或者你想要构建一个临时的Id->Variant地图,然后使用它:

function Compare(){
    var OldVariants = Variants();
    var RequestVariants = ProductRequests();
    var VariantMap = {};

    OldVariants.forEach(function(variant) {
        VariantMap["x" + variant.Id] = variant;
    });

    RequestVariants.forEach(function(req) {
        var variant = VariantMap["x" + req.Id];
        if (variant) {
            variant.Quantity(req.Quantity);
        });
    });
}