我有这个javascript对象:
var arr1 = [{id:'124',name:'qqq'},
{id:'589',name:'www'},
{id:'45',name:'eee'},
{id:'567',name:'rrr'}]
var arr2 = [{id:'124',name:'ttt'},
{id:'45',name:'yyy'}]
我需要将arr1中的对象替换为arr2中具有相同id的项目。
所以这是我想要得到的结果:
var arr1 = [{id:'124',name:'ttt'},
{id:'589',name:'www'},
{id:'45',name:'yyy'},
{id:'567',name:'rrr'}]
我如何使用javascript实现它?
发布于 2016-06-02 15:30:22
您可以在Array#find
中使用Array#map
。
arr1.map(obj => arr2.find(o => o.id === obj.id) || obj);
var arr1 = [{
id: '124',
name: 'qqq'
}, {
id: '589',
name: 'www'
}, {
id: '45',
name: 'eee'
}, {
id: '567',
name: 'rrr'
}];
var arr2 = [{
id: '124',
name: 'ttt'
}, {
id: '45',
name: 'yyy'
}];
var res = arr1.map(obj => arr2.find(o => o.id === obj.id) || obj);
console.log(res);
在这里,如果在arr2
中找到id
,arr2.find(o => o.id === obj.id)
将从arr2
返回元素,即object。如果不是,则返回arr1
中的相同元素,即obj
。
发布于 2019-09-27 10:16:06
Object.assign(target, source)
有什么问题?
在Javascript中,数组仍然是object类型,所以只要找到匹配的键,使用assign仍然应该重新分配由操作符解析的任何匹配的键,对吗?
发布于 2016-06-02 15:54:50
由于您使用的是Lodash,因此可以使用_.map
和_.find
来确保支持主要浏览器。
最后,我会使用类似这样的东西:
function mergeById(arr) {
return {
with: function(arr2) {
return _.map(arr, item => {
return _.find(arr2, obj => obj.id === item.id) || item
})
}
}
}
var result = mergeById([{id:'124',name:'qqq'},
{id:'589',name:'www'},
{id:'45',name:'eee'},
{id:'567',name:'rrr'}])
.with([{id:'124',name:'ttt'}, {id:'45',name:'yyy'}])
console.log(result);
<script src="https://raw.githubusercontent.com/lodash/lodash/4.13.1/dist/lodash.js"></script>
https://stackoverflow.com/questions/37585309
复制相似问题