【问题标题】:Merge loops with jQuery.extend: last value is always the same?使用 jQuery.extend 合并循环:最后一个值总是相同的?
【发布时间】:2011-11-30 20:21:56
【问题描述】:

我有两个“哈希”数组。我需要将它们合并在一起,因此最终结果是另一个哈希数组,除了条目数是两个数组的乘积。

    inhabitants = {}
    idx = 0
    for (i=0; i<persons.length; i++) {
        person = persons[i];
        for (j=0; j<houses.length; j++) {
            house = houses[j];
            console.log(house);
            inhabitants[idx] = $.extend(person,house);
            console.log(inhabitants[idx]);
            idx++;
        }
    }

我最终得到的是大量的条目,这取决于 $.extend() 行中参数的顺序。并且添加的“house”条目始终是数组中的最后一个条目。

显然,来自 jQuery 的 $.extend() 并没有达到我的预期。有人可以帮忙吗?

【问题讨论】:

  • 我不确定我是否理解,但你可以试试$.extend({}, person, house) 吗?您当前正在覆盖person
  • pimvdb,如果两个哈希之间的密钥不同,那么来自房屋的密钥不会添加到人吗?我会试试你说的。
  • 没错,但是您知道您基本上是在将person 分配给inhabitants[idx] 吗?请注意,之前分配的对象也发生了变化,因为嵌套循环中只有一个person
  • 请把它作为答案 pimvdb,它起作用了!
  • 对,每个人都应该和每个房子合并。

标签: javascript jquery


【解决方案1】:

$.extend(a, b)b 合并为a,并返回a

您正在使用的返回值,但您似乎错过了 a 也正在更改的事实 - 您当前每次都将相同的变量 person 分配给 inhabitants[idx]

【讨论】:

    【解决方案2】:

    我并没有真正得到你想要做的事情,但无论如何只是一些提示。放置所有分号是个好主意(这里第一行和第二行都没有分号)。然后我不明白为什么你使用一个对象而不是一个你只需要推送新项目的数组。另一件事是,在 js 中,缓存人员和房屋集合的长度更快。我将尝试提出我如何理解您的任务的代码,也许我弄错了:

    var inhabitants = [],
        idx = 0,
        personCount = persons.length,
        houseCount = houses.length,
        person = {},
        house = {},
        i = 0,
        j = 0;
    
    for (i = 0; i < personCount; i++) {
        person = persons[i];
        for (j = 0; j < houseCount; j++) {
            house = houses[j];
            inhabitants.push($.extend({}, person, house);
        }
    }
    

    所以对我来说,这似乎是两个表 person 和 house 之间的数据库连接。这是你的意思吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-23
      • 1970-01-01
      • 1970-01-01
      • 2019-08-01
      相关资源
      最近更新 更多