使用jQuery.extend合并循环:最后一个值总是相同的?

时间:2011-11-30 20:21:56

标签: javascript jquery

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

    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()行中参数的顺序。并且添加的“房子”条目始终是阵列中的最后一个。

显然,来自jQuery的这个$ .extend()没有按照我的预期行事。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:3)

$.extend(a, b)b合并到a,然后返回a

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

答案 1 :(得分:0)

我并没有真正得到你想要做的事情,但无论如何只是一些提示。放置所有分号是个好主意(这里它们在第一行和第二行中都丢失了)。然后我不明白你为什么要使用一个对象而不是一个只需要推送新项目的数组。另一件事是,在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);
    }
}

所以对我而言,这似乎是两个人和房子之间的数据库连接。这是你的意思吗?