【问题标题】:looping through 2 arrays javascript循环遍历 2 个数组 javascript
【发布时间】:2014-12-17 18:43:00
【问题描述】:

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

请注意:所有数据都在传递,不要担心我的问题是关于循环遍历我在下面说明的数据并使其正常工作。当这个函数命中时,所有东西都已经被传入了。

我有 2 个在其中保存数据的数组,一个称为 Variants(),它始终包含 6 个具有唯一 ID 的变体,另一个称为 ProductRequests()。 Variants 包含我所有的 Variants 和 ProductRequests 包含所有选择的变体,这可以从 1 到 6 不等,所以这完全取决于他们选择的内容,但他们必须至少选择一个.. 无论他们选择什么,总会有一个匹配项与 Variants() 数组 ID 进行比较时。

这些都包含相互匹配的 ID 和数量,我想要做的是循环遍历变体和产品请求,查找是否有任何 id 匹配,然后如果它们匹配来自 ProductRequests 的数量,则覆盖来自该产品 ID 的变体。我已经完成了下面的第二部分,但它需要写得更好。

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

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)}
        }

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

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

【问题讨论】:

  • Compare 函数的作用是什么?你说过它比较它们,但不是如何,或者你期望什么结果,或者......
  • 它首先将变量数组的 ids 设置为一个变量。然后它将该id与ProductRequest().id进行比较。现在我想要发生的是循环遍历2个数组并在2个数组中找到任何匹配的ID。现在如果有匹配项,我希望它做一个 if 语句并将每个匹配 ID 的 ProductRequests().Quantity 添加到 Variants().Quantity
  • 好的,很好——这就是我的回答。 :-) (假设OldVariants 条目上的Quantity 函数进行了添加。)
  • 我尝试应用您的函数.. 它正确获取第一个函数,但如果选择了多个 ProductRequest,它不会循环遍历?
  • 是的,确实如此——forEach 就是这样做的。

标签: javascript jquery arrays for-loop foreach


【解决方案1】:

如果您的目标是更新 OldVariants 中与 RequestVariants 中的条目具有相同 Id 的条目,使用请求的变体的 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);
        });
    });
}

【讨论】:

  • 在下一个函数中是 variant.Quantity(req.Quantity);我清除了所有请求,所以它再也找不到了,但我现在删除了那部分,非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-18
  • 1970-01-01
  • 1970-01-01
  • 2013-08-16
  • 2021-11-25
  • 1970-01-01
  • 2019-07-10
相关资源
最近更新 更多