根据键属性合并不相同长度的哈希数组
Merge not same length arrays of hashes based on key attribute
我想使用JS, Underscore或JQuery合并2个哈希数组为1个新数组。
这两个数组可以是不同的长度,合并将基于id属性。相同数组之间的哈希值不能有相同的id,例如:
array_id = [1,5]
arr2 id's = [1,2]
下面是我的数组:arr1 = [{
id: 1
name: 'fred'
},id: 5
name: 'alex'
}];
arr2 = [{
id: 1
wage: '300'
},{
id: 2
wage: '10'
}]
基于id属性,我应该得到以下内容:
arr3 = [{
id: 1
name: 'fred'
wage: '300'
},{
id: 2
wage: '10'
},{
id: 5
name: 'alex'
}]
我尝试合并/扩展javascript对象数组基于每个键属性的连接,但如果数组长度不相同,它不起作用。任何帮助吗?
您可以使用Object.assign
:
arr1 = [{ id: 1, name: 'fred' }];
arr2 = [
{ id: 1, wage: '300' },
{ id: 2, wage: '10' }
];
var result = [];
arr1.concat(arr2)
.forEach(item =>
result[item.id] =
Object.assign({}, result[item.id], item)
);
result = result.filter(r => r);
console.log(result)
EDIT
这个解决方案,如注释中所述,不考虑通过id进行匹配。要查看实际操作,只需将{ id:7, name: 'wilma' }
添加到第一个数组中。
我把它留在这里,然而,因为从示例数据或描述中不清楚,这是OP的关键问题,尽管我也有部分错误。但是我会在那里评论如果他说是的话我可能会编辑或删除
jQuery.extend()
jQuery。extend([deep], target, object1 [, objectN])
传入额外的参数使其成为深度合并,即递归
https://jsfiddle.net/dabros/q0hhqbmf/arr1 = [{
id: 1,
name: 'fred'
}];
arr2 = [{
id: 1,
wage: '300'
},{
id: 2,
wage: '10'
}]
arr3 = [];
// Use 2 extends, though $.merge(x,$.extend(y,z)) would work just as well in this case
$.extend(arr3, $.extend(true, arr1, arr2 ));
console.log(arr3);
为什么不简单地迭代它们,并在新数组中收集呢?
<script src="https://raw.githubusercontent.com/lodash/lodash/4.13.1/dist/lodash.js"></script>
<script>
var arr1 = [
{
id: 1,
name: 'fred'
},
{
id: 5,
name: 'alex'
}
];
var arr2 = [
{
id: 1,
wage: '300'
},
{
id: 2,
wage: '10'
}
];
var a1, a2, arr3 = [], merged = [];
// finding intersection and merging
for(a1 = 0; a1 < arr1.length; a1++) {
for(a2 = 0; a2 < arr2.length; a2++) {
if(arr1[a1].id === arr2[a2].id) {
arr3.push(_.extend(arr1[a1], arr2[a2]));
merged.push(arr1[a1].id);
break
}
}
}
// finding non merged elements and adding
for(a1 = 0; a1 < arr1.length; a1++) {
if(merged.indexOf(arr1[a1].id) > -1) {
continue;
}
arr3.push(arr1[a1]);
}
// finding non merged elements and adding
for(a2 = 0; a2 < arr2.length; a2++) {
if(merged.indexOf(arr2[a2].id) > -1) {
continue;
}
arr3.push(arr2[a2]);
}
document.write(JSON.stringify(arr3));
</script>
相关文章:
- 用于跟踪购物车可用性的Javascript数组/对象/哈希表
- 将元素排列到哈希数组中
- 如何使用哈希对数组进行排序
- 如何将值存储在哈希图/数组中以便稍后进行比较
- 我怎样才能优雅地更新哈希数组中的值
- 有没有一种漂亮的方法可以将列表/哈希数组转换为可用的字符串
- 在哈希数组中保存对 jquery 元素的引用
- 哈希数组上的车把 JS
- 使用多个分组依据查找哈希数组的平均值
- 将哈希数据传递给javascript
- 迭代javascript哈希数组的最佳方式
- 使用对象的属性作为键将对象添加到哈希/数组
- 在Javascript中按值排序哈希/数组
- Es6哈希数组索引函数调用混合语法
- JavaScript中高效的内存哈希数组
- 在javascript中查找具有公共键的哈希数组的最高值
- Ruby中的嵌套循环,哈希和数组
- 在javascript中创建一个哈希数组
- 根据键属性合并不相同长度的哈希数组
- 将数组的数组重组为哈希数组并转换为JSON