我想将两个数组与 lodash 组合在一起,但是有一个捕获量。如果项目具有相同的ID,请选择第2个阵列中的一个。示例:
let arr1 = [{ id: 1, name: 'name1'}, { id: 2, name: 'name2'}, { id: 3, name: 'name3'}];
let arr2 = [{ id: 3, name: 'name3', score: 1}];
预期结果
[{ id: 1, name: 'name1'}, { id: 2, name: 'name2'}, { id: 3, name: 'name3', score: 1}];
任何想法,如何实现这一目标。给我开一些想法。预先感谢您。
在普通的JavaScript中,您可以使用Map
并检查第二个数组的一个项目是否存在,然后从第二个数组中从第二个数组中获取一个。
let array1 = [{ id: 1, name: 'name1'}, { id: 2, name: 'name2'}, { id: 3, name: 'name3'}],
array2 = [{ id: 3, name: 'name3', score: 1}],
map2 = new Map(array2.map(a => [a.id, a])),
result = array1.map(a => map2.get(a.id) || a);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
es5带有对象作为哈希表。
var array1 = [{ id: 1, name: 'name1'}, { id: 2, name: 'name2'}, { id: 3, name: 'name3'}],
array2 = [{ id: 3, name: 'name3', score: 1}],
map2 = array2.reduce(function (r, a) {
r[a.id] = a;
return r;
}, Object.create(null)),
result = array1.map(function (a) {
return map2[a.id] || a;
});
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }