2011-07-30 5 views
0

이것은 메모 요청과 관련하여 많은 질문이 아닙니다.JavaScript 객체 두 개를 병합하고 키 이름을 변경

나는 두 개의 객체를 가지고 있으며 두 번째 객체의 값을 취하여 첫 번째 객체의 속성 이름을 유지하면서 첫 번째 객체의 값과 병합 (덮어 쓰기)하고 싶습니다.

두 번째 개체의 키 이름은 길고 사람의 소비를 설명하는 반면 첫 번째 키 이름은 간결하고 못생긴 바이트를 저장합니다.

두 번째 객체의 가독성이 문제가되기 전에 jQuery를 사용하고 있었으므로 지금은 내 자신의 방식으로이 문제를 해결했습니다. 그러나 객체를 반복하는 것이 원래 순서대로 키/값 쌍을 반환하지 않기 때문에 이것이 장기적으로 실행 가능한 솔루션인지 궁금합니다. 바라건대이 코드가이 점을 잘 설명해 주길 바랍니다.

아이디어를 보내 주셔서 감사합니다. :)

var ob = {}, i = 0, k, pArr = []; 

for(k in p){ 

    if(p.hasOwnProperty(k)){ 
     pArr.push(k); 
    } 

} 

for(k in c){ 

    if(c.hasOwnProperty(k)){ 
     ob[pArr[i]] = c[k]; 
    } 

    i++; 

} 

이제 ob 객체에는 두 번째 객체의 모든 속성이 있지만 첫 번째 객체의 키 이름이 있습니다. 이것은 효과가 있지만 추한 느낌이 들며, 더 좋은 방법이 있는지 궁금합니다.

답변

0

루프가 특정 순서로 개체를 반환하지 않는 것을 이미 확인했습니다. 따라서 ob[pArr[i]] = cArr[k]; 라인은 안전하지 않습니다.

  1. 당신은 키 이름의 매핑이 필요합니다 (p_key => c_key라고 할 수 있습니다).

  2. 매핑을 반복합니다.

예 :

for (p_key in map) 
    c_key = map[p_key]; 
    ob[p_key] = c[c_key]; 

예 2 - 진정한 P 속성 유지 : 나 값에 따라 두 번째 객체의 값을 가진 객체를 덮어 쓸 수 있지만하지 않는

for (p_key in p) ob[p_key] = p[p_key]; 
for (... same as above) 
+0

을 첫 번째 객체의 속성 이름도 유지하도록 허용합니다. 그러나 나는 그것을 조정하고있다. – Tom

+0

그럼'ob [p_key] = c [c_key]'를'p [p_key] = c [c_key]'로 변경하면 첫 번째 객체가 두 번째 객체의 모든 값으로 업데이트됩니다. 그러나 매핑 된 p 키가 아닌 모든 것을 원한다면 미리'p'의 모든 값으로'ob'을 초기화해야합니다. –

+0

내 방법을 사용하여 프로세스를 100000 번 반복하면 모든 속성이 방해가되는 과정에서 같은 결과를 얻습니다 ... 그냥 기회입니까? – Tom