2016-08-06 6 views
0

배열 2에서 배열 2를 확장하여 "값"을 얻고 자하는 두 개의 배열이 있습니다.jQuery 확장 개체를 덮어 쓰고 중복을 만듭니다

그러나 extend는 다른 객체도 덮어 씀으로써 중복을 만듭니다.

var array1 = [{ 
 
attributeId: 2, 
 
attributeName: "ToolOutput", 
 
values: [ 
 
    "tool output value" 
 
] 
 
    }, { 
 
attributeId: 4, 
 
attributeName: "AggregationLevel", 
 
values: [ 
 
    "aggregation level value" 
 
] 
 
    }]; 
 

 
    var array2 = [{ 
 
attributeId: 1, 
 
attributeName: "DataToolsUsage", 
 
values: [] 
 
    }, { 
 
attributeId: 2, 
 
attributeName: "ToolOutput", 
 
values: [] 
 
    }, { 
 
attributeId: 3, 
 
attributeName: "ConnectedTo", 
 
values: [] 
 
    }, { 
 
attributeId: 4, 
 
attributeName: "AggregationLevel", 
 
values: [] 
 
    }]; 
 

 
    var newArray = $.extend({},array2, array1); 
 

 
var printed = "result[0] is : <br> " + JSON.stringify(newArray[0]); 
 
printed = printed + "<br><br> result[1] is : <br> " + JSON.stringify(newArray[1]) 
 
printed = printed + "<br><br> result[2] is : <br> " + JSON.stringify(newArray[2]) 
 
printed = printed + "<br><br> result[3] is : <br> " + JSON.stringify(newArray[3]) 
 
    
 
document.write(printed);

당신은 결과 두 개의 "AggregationLevel"개체에서 볼 수

enter link description here

. 또한 "DataToolsUsage"의 제거

어떤 생각?

+0

https://plnkr.co/edit/uF6dEuGZ2Y8ADakjdKjs –

답변

0

다음과 같이 extend를 호출해야합니다. $.extend({}, array1, array2). 첫 번째 빈 객체는 array1과 array2를 확장 한 결과를 저장하려는 대상 객체입니다. 대상 인수를 제공하지 않으면 array1이 대상 객체로 간주되므로 값을 덮어 씁니다. 연장에 대한 자세한 내용은 https://api.jquery.com/jquery.extend/을 참조하십시오.

+0

같은 결과는 plunkr을 확인할 수 있습니다 https://plnkr.co/edit/uF6dEuGZ2Y8ADakjdKjs –

0

$.extend은 이러한 작업에 적합하지 않습니다. 사용자 정의 식별자 필드가있는 객체의 배열이 두 개 있습니다. 따라서 배열을 병합하려면 모든 항목을 반복하고 결과 배열을 수동으로 채워야합니다. underscore과 같은 라이브러리를 사용하면 조금 더 쉽게 처리 할 수 ​​있지만 전혀 필요하지는 않습니다.

관련 문제