2011-11-30 25 views
1

我有兩個「散列」數組。我需要將它們合併到一起,以便最終結果是另一個哈希數組,除了條目數是兩個數組的產物。用jQuery.extend合併循環:上一個值總是相同的?

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()並沒有達到我期望的水平。誰能幫忙?

+3

我不確定我是否理解,但是您可以嘗試'.extend({},person,house)'而不是?你目前正在覆蓋'person'。 – pimvdb

+0

pimvdb,如果這兩個哈希值之間的鍵不同,那麼從房子的密鑰不會被添加到個人?我會嘗試你所說的。 – AKWF

+1

這是正確的,但你是否知道你基本上將'person'分配給'居民[idx]'?請注意,以前分配的對象也會因爲嵌套循環中只有一個'person'而被更改。 – pimvdb

回答

3

$.extend(a, b)合併ba,並返回a

您正在使用的返回值,但看起來您錯過了a也正在更改的事實 - 您當前每次都將相同變量person分配到inhabitants[idx]

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

所以對我來說似乎是一個數據庫中的兩個表的人與房屋之間的連接。這是你的意思嗎?