如何合并两个对象数组
Posted
技术标签:
【中文标题】如何合并两个对象数组【英文标题】:How to merge two array of objects 【发布时间】:2013-05-21 19:55:32 【问题描述】:我有两个对象数组,如下所示:
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
的共同点,它们的名称不止name,name2。例如,有时 result
数组将具有 id, name, name2, name3
和 moreDetails
将具有 id, name, name4
。我想说的是,除了id
之外,我并不总是提前知道这两个数组会有什么。因此,我不能像某些答案所建议的那样对字段名称进行硬编码。
【问题讨论】:
这能回答你的问题吗? Merge two array of objects based on a key 【参考方案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);
【讨论】:
你也可以$.extend(result[i], moreDetails[i])
+1。我要试试这个。顺便说一句,请查看我的编辑问题。
我打算用@Blender 的评论来回答,你应该把它作为答案。另外,我很确定您不需要 [i] 部分,只需 $.extend(arr1, arr2);
@Blender $.extend(result[i], moreDetails[i])
工作。如果您不发表评论作为答案,我将不得不接受这个,非常感谢!
@TomFobear it $.extend(result, moreDetails)
没有 [i] 对我不起作用。【参考方案2】:
<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>
【讨论】:
谢谢!请查看我的编辑问题。我提供了更多细节。 为你更新了示例:) 感谢您提供详细的代码示例,我将在获得 15 分后立即给这篇帖子投票 :)以上是关于如何合并两个对象数组的主要内容,如果未能解决你的问题,请参考以下文章