2016-08-18 2 views
-2

병합 할 필요가있는 2 개의 2 레벨 JavaScript 구조가 있습니다. 가장 쉬운 방법은 무엇입니까?두 개체를 병합하십시오.

var object1={ 
    "section1": { 
    "prop1": 0, 
    "prop2": 0 
    }, 
    "section2": { 
    "something": 0, 
    "other": 0 
    } 
} 

var object2={ 
    "section1": { 
    "prop1": 1 
    } 
} 

object2는 사용자가 UI에서 변경 사항을 포함하고 나는 object2의 값으로 덮어 object2에 존재하는 속성 만에 모든 데이터를 표시, 병합 된 개체를 얻을 필요가있다.

+0

그래서' "prop1"만해야 섹션 1에 대한 결과? –

+0

@NenadVracar Object1은 전체 구성이며 장치에서로드됩니다. Object2는 사용자가 변경 한 내용 만 장치에 아직 저장하지 않았으므로 (첫 번째 개체에 병합해야하므로 새로 변경된 옵션이 포함 된 원본 구성을 장치로 보낼 수 있습니다). 소스를 업데이트했습니다 - object2.section1.prop1은 object1에 병합하고 싶은 값 1을 갖습니다. – Kokesh

+0

그래서 section1은 prop1이고 prop2는 prop1이 object2에서 업데이트되었습니다. –

답변

0

var mergedObj = Object.assign({}, object1, object2) 귀하의 질문을 정확하게 이해 한 경우.

1

Object.keys()reduce()을 사용하여 수행 할 수 있으며 키가 발견되면 Object.assign() 인 i object2가 있으면 각 개체를 업데이트 할 수 있습니다. '0'prop2`없이 :

var object1={ 
 
    "section1": { 
 
    "prop1": 0, 
 
    "prop2": 0 
 
    }, 
 
    "section2": { 
 
    "something": 0, 
 
    "other": 0 
 
    } 
 
} 
 

 
var object2={ 
 
    "section1": { 
 
    "prop1": 5 
 
    } 
 
} 
 

 
var result = Object.keys(object1).reduce(function(r, k) { 
 
    if(object2[k]) { 
 
    r[k] = Object.assign({}, object1[k], object2[k]); 
 
    } else { 
 
    r[k] = object1[k]; 
 
    } 
 
    return r; 
 
}, {}); 
 

 
console.log(result);

관련 문제