-
MM们
迭代较大的数组,即包含较小数组的数组:let arr1=[{id:"1",createdDate:"2017-01-24"},{id:"2",createdDate:"2017-01-22"}],arr2=[{id:"1",name:"test"},{id:"3",foo:"bar"},{id:"2",bar:"foo"}];const merged = arr2.map(item => ({ ...arr1.find(({ id }) => id === item.id), ...item}));console.log(merged);(如果顺序很重要,您也可以在之后排序)如果您事先不知道哪个/如果一个将包含另一个,那么首先使用一个对象通过 ID 索引合并的对象:let arr1=[{id:"1",createdDate:"2017-01-24"},{id:"2",createdDate:"2017-01-22"}],arr2=[{id:"1",name:"test"},{id:"3",foo:"bar"},{id:"2",bar:"foo"}];const resultObj = Object.fromEntries( arr1.map( item => [item.id, { ...item }] ));for (const item of arr2) { if (!resultObj[item.id]) { resultObj[item.id] = item; } else { Object.assign(resultObj[item.id], item); }}const merged = Object.values(resultObj);console.log(merged);
-
MMMHUHU
您可以编写一个函数将数组缩减为一个对象,然后从该对象中提取值,该对象将返回您想要的值。你可以看到下面的代码:let arr1 = [ { id: '1', createdDate: '2017-01-24', }, { id: '2', createdDate: '2017-01-22', },];let arr2 = [ { id: '1', name: 'test', }, { id: '3', foo: 'bar', }, { id: '2', bar: 'foo', },];function merge(arr1 = [], arr2 = []) { return Object.values( arr1.concat(arr2).reduce( (acc, curr) => ({ ...acc, [curr.id]: { ...(acc[curr.id] ?? {}), ...curr }, }), {} ) );}const merged = merge(arr1, arr2);输出:[ { "id": "1", "createdDate": "2017-01-24", "name": "test" }, { "id": "2", "createdDate": "2017-01-22", "bar": "foo" }, { "id": "3", "foo": "bar" }]
-
守候你守候我
arr1您可以创建包含和arr2group by键的元素的新对象,id如下所示,合并的数组将存储在对象值上。您可以使用Object.valuesfunc 获取对象值。let arr1 = [{ id: '1', createdDate: '2017-01-24' }, { id: '2', createdDate: '2017-01-22' },];let arr2 = [{ id: '1', name: 'test' }, { id: '3', foo: 'bar' }, { id: '2', bar: 'foo' },];const groupById = {};for (let i = 0; i < Math.min(arr1.length, arr2.length); i ++) { if (arr1[i]) { groupById[arr1[i].id] = { ...groupById[arr1[i].id], ...arr1[i] }; } if (arr2[i]) { groupById[arr2[i].id] = { ...groupById[arr2[i].id], ...arr2[i] }; }}const merged = Object.values(groupById);console.log(merged);
-
茅侃侃
您可以采用单循环方法,将对象存储在哈希表中,并按 排序id。const mergeTo = (target, objects = {}) => o => { if (!objects[o.id]) target.push(objects[o.id] = {}); Object.assign(objects[o.id], o); }, array1 = [{ id: '1', createdDate: '2017-01-24' }, { id: '2', createdDate: '2017-01-22' }], array2 = [{ id: '1', name: 'test' }, { id: '3', foo: 'bar' }, { id: '2', bar: 'foo' }], merged = [], merge = mergeTo(merged); array1.forEach(merge);array2.forEach(merge);console.log(merged);.as-console-wrapper { max-height: 100% !important; top: 0; }