JavaScript에서 두 개의 연관 배열을 병합하는 가장 좋은 / 표준 방법은 무엇입니까? 모두가 자신의 for
루프 를 굴려서 그것을합니까 ?
답변
jquery를 사용하면 호출 할 수 있습니다 $.extend
var obj1 = {a: 1, b: 2};
var obj2 = {a: 4, c: 110};
var obj3 = $.extend(obj1, obj2);
obj1 == obj3 == {a: 4, b: 2, c: 110} // Pseudo JS
(연관 배열은 js의 객체입니다)
여기를보십시오 : http://api.jquery.com/jQuery.extend/
편집 : rymo가 제안한 것처럼 다음 과 같이하는 것이 좋습니다.
obj3 = $.extend({}, obj1, obj2);
obj3 == {a: 4, b: 2, c: 110}
여기에서 obj1 (및 obj2)은 변경되지 않습니다.
edit2 : 2018 년에 수행하는 방법은 Object.assign
다음과 같습니다.
var obj3 = Object.assign({}, obj1, obj2);
obj3 === {a: 4, b: 2, c: 110} // Pseudo JS
ES6으로 작업하는 경우 Spread Operator를 사용하면됩니다 .
const obj3 = { ...obj1, ...obj2 };
답변
이제 2016 년 가장 좋은 표준 방법은 Object.assign ()
Pure Javascript 라고 말합니다 . jQuery가 필요하지 않습니다.
obj1 = {a: 1, b: 2};
obj2 = {a: 4, c: 110};
obj3 = Object.assign({},obj1, obj2); // Object {a: 4, b: 2, c: 110}
자세한 정보, 예제 및 polyfill :
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign
답변
이것이 프로토 타입이하는 방식입니다 :
Object.extend = function(destination, source) {
for (var property in source) {
if (source.hasOwnProperty(property)) {
destination[property] = source[property];
}
}
return destination;
};
예를 들어
var arr1 = { robert: "bobby", john: "jack" };
var arr2 = { elizabeth: "liz", jennifer: "jen" };
var shortnames = Object.extend(arr1,arr2);
편집 : 의견에서 bucabay가 올바르게 지적한 hasOwnProperty () 확인을 추가했습니다.
답변
간단하게 …
function mergeArray(array1,array2) {
for(item in array1) {
array2[item] = array1[item];
}
return array2;
}
답변
밑줄 에는 확장 방법이 있습니다.
소스 객체의 모든 속성을 대상 객체로 복사합니다. 순서가 다르므로 마지막 소스는 이전 인수에서 같은 이름의 속성을 재정의합니다.
_.extend(destination, *sources)
_.extend({name : 'moe'}, {age : 50});
=> {name : 'moe', age : 50}
답변
에서 도장 , 2 객체 / 배열 “병합”될 것이다 lang.mixin(destination, source)
– 당신은 또한, 하나 개의 목적지로 등 여러 소스를 혼합 할 수 있습니다 – 볼 믹스 인 함수의 참조 자세한 내용을.
답변
이름은 같지만 값이 아닌 경우 속성을 덮어 쓰시겠습니까?
원래 객체 중 하나를 영구적으로 변경하고 싶습니까?
또는 새로운 병합 된 개체를 반환 하시겠습니까?
function mergedObject(obj1, obj2, force){
for(var p in obj1) this[p]= obj1[p];
for(var p in obj2){
if(obj2.hasOwnProperty(p)){
if(force || this[p]=== undefined) this[p]= obj2[p];
else{
n= 2;
while(this[p+n]!== undefined)++n;
this[p+n]= obj2[p];
}
}
}
}