2011-11-30 5 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)'시도해도 될까요? 현재 '사람'을 덮어 쓰고 있습니다. – pimvdb

+0

pimvdb, 두 개의 해시간에 키가 다른 경우 집의 키를 사람에게 * 추가 ​​*하지 않습니까? 나는 네가하는 말을 시도 할 것이다. – AKWF

+1

맞습니다. 기본적으로'person'을'주민 [idx]'에게 할당하고 있다는 것을 알고 계십니까? 중첩 루프에 '사람'이 하나만 있기 때문에 이전에 할당 된 객체도 변경됩니다. – pimvdb

답변

3

$.extend(a, b)ba으로 병합하고 a을 반환합니다.

사용중인 반환 값이지만 a도 변경되고있는 것 같습니다. 현재 동일한 변수 personinhabitants[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); 
    } 
} 

그래서 나에게 그것은 데이터베이스처럼 보인다 두 테이블의 사람과 집 사이에 가입 할 수 있습니다. 이게 당신이 의미 한거야?

관련 문제