2013-05-27 196 views
3

我有兩個對象數組像以下:如何合併兩個數組對象

result=   [{id:24, name:"xyz"}, {id:45,name:"tze"}] 

moreDetails= [{id:24, name2:"hyi"}, {id:45, name2:"tikw"}] 

我想上面這樣

mergedResult= [{id:24, name:"xyz", name2:"hyi"}, {id:45,name:"tze", name2:"tikw"}] 

請注意合併是在ID發生合併結果,這兩個陣列都有。

我試圖按照這一How to merge these arrays/json objects?這一個How can I merge properties of two JavaScript objects dynamically?

不過,我想我迷路了,我的問題,可能需要很短的和簡單的解決方案。

編輯

我試圖簡化我的例子。實際上,上面的兩個數組都有id的共同點,它們的名字都比name2多。例如,有時result陣列將具有id, name, name2, name3moreDetails將具有id, name, name4。我想說,我並不總是提前知道除了id之外這兩個陣列都會有什麼。所以,我不能像某些答案所建議的那樣對字段名進行硬編碼。

回答

1

可以使用for循環,在這種情況下延伸的陣列元素中的一個比創建另一個陣列更好:

for (var i = 0; i < result.length; i++) { 
    result[i].name2 = moreDetails[i].name2; 
} 

http://jsfiddle.net/9uchU/

在面向元件的情況下具有不同的索引:

for (var i = 0; i < result.length; i++) { 
    var c = result[i], 
     // filtering the second array based on the `id` 
     // of the current element 
     m = moreDetails.filter(function(elem) { 
      return elem.id === c.id; 
     })[0]; 
    c.name2 = m ? m.name2 : 'not defined'; 
} 

編輯:根據您上次的編輯,如@Blender所述,您還可以使用jQuery $.extend()實用功能:

$.extend(result, moreDetails); 
+1

你也可以做'$ .extend(結果[I],moreDetails [1])' – Blender

+0

+1。我會試試這個。順便說一句,請參閱我的編輯問題。 – akk

+0

我要回答@ Blender的評論,你應該把它作爲答案。另外,我很確定你不需要[i]部分,只需$ .extend(arr1,arr2); –

1
<html> 
<head><title></title> 
<script src="http://code.jquery.com/jquery-1.10.0.min.js" ></script> 
</head> 
<body> 

<script> 
    function findElement(arr, propName, propValue) { 
     for (var i=0; i < arr.length; i++){ 
     if (arr[i][propName] == propValue){ 
      return arr[i]; 
     } 
     } 
    } 

    var result = [{id:24, name:"xyz"}, {id:45,name:"tze"}]; 
    var moreDetails= [{id:24, name2:"hyi"}, {id:45, name2:"tikw"}]; 
    var mergedResult = result; 

    for (var i = 0; i<result.length;i++) { 
     //mergedResult[i].name2 = findElement(moreDetails, "id", result[i].id).name2 
    $.extend(mergedResult[i],findElement(moreDetails, "id", result[i].id)); 
    } 

    mergedResult; 
</script> 
</body> 
</html> 
+0

謝謝!請參閱我的編輯問題。我提供了更多細節。 – akk

+0

更新了你的例子:) –

+2

感謝您的詳細代碼示例,我會盡快給予這篇文章,只要我賺到15分:) – akk