亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何按鍵合并兩個對象數組并在單個對象數組中保留唯一鍵?

如何按鍵合并兩個對象數組并在單個對象數組中保留唯一鍵?

慕斯709654 2023-06-29 15:45:12
我想合并兩個對象數組,其中具有相同 ID 的對象將合并屬性,而具有唯一 ID 的對象將成為合并數組中其自己的對象。以下代碼執行第一部分,其中相似的 ID 將合并,但如何將arr2中具有唯一 id 的對象保留在合并數組中,并使其適用于不同長度的數組?預期輸出:[  {    "id": "1",    "date": "2017-01-24",    "name": "test"  },  {    "id": "2",    "date": "2017-01-22",    "bar": "foo"  }  { "id": "3",    "foo": "bar",  }]代碼: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'  },];let merged = [];for (let i = 0; i < arr1.length; i++) {  merged.push({      ...arr1[i],      ...arr2.find((itmInner) => itmInner.id === arr1[i].id),    },  );}console.log(merged);
查看完整描述

4 回答

?
MM們

TA貢獻1886條經驗 獲得超2個贊

迭代較大的數組,即包含較小數組的數組:


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);


查看完整回答
反對 回復 2023-06-29
?
MMMHUHU

TA貢獻1834條經驗 獲得超8個贊

您可以編寫一個函數將數組縮減為一個對象,然后從該對象中提取值,該對象將返回您想要的值。你可以看到下面的代碼:


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"

  }

]


查看完整回答
反對 回復 2023-06-29
?
守候你守候我

TA貢獻1802條經驗 獲得超10個贊

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);


查看完整回答
反對 回復 2023-06-29
?
茅侃侃

TA貢獻1842條經驗 獲得超21個贊

您可以采用單循環方法,將對象存儲在哈希表中,并按 排序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; }


查看完整回答
反對 回復 2023-06-29
  • 4 回答
  • 0 關注
  • 216 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號