我需要根據 obj2 中的 id 值更新(或創建新陣列)obj1 中的 id 值。做這個的最好方式是什么?我嘗試過 map 和 reduce,但沒有成功。任何幫助將不勝感激。
const obj1 = [ { id: 1, name: 'foo' }, { id: 2, name: 'bar' } ]
const obj2 = { A: { id: 1, externalId:'AAA' }, B: { id: 2, externalId:'BBB' } }
outputExpected: [ { id: 'AAA', name: 'foo' }, { id: 'BBB', name: 'bar' } ]
uj5u.com熱心網友回復:
根據陣列的大小,構建可用于映射 obj1的Map索引 obj2 ids ( Map(2) { 1 => 'AAA', 2 => 'BBB', ... })可能更有效。
const obj1 = [{ id: 1, name: 'foo' }, { id: 2, name: 'bar' },];
const obj2 = { A: { id: 1, externalId: 'AAA' }, B: { id: 2, externalId: 'BBB' } };
const map = new Map(Object.values(obj2).map((o) => [o.id, o.externalId]));
const result = obj1.map(({ id, ...o }) => ({ id: map.get(id), ...o }));
console.log(result);
uj5u.com熱心網友回復:
我建議使用Array.map(), 在 obj1 中的每個物件中搜索 obj2 以獲取匹配的 id,我們將用于Array.find()獲取 obj2 中的相應值。
const obj1 = [ { id: 1, name: 'foo' }, { id: 2, name: 'bar' } ]
const obj2 = { A: { id: 1, externalId:'AAA' }, B: { id: 2, externalId:'BBB' } }
const result = obj1.map((obj) => {
const match = Object.values(obj2).find(el => el.id === obj.id);
return { id: match.externalId, name: obj.name };
});
console.log('Result:', result)
.as-console-wrapper { max-height: 100% !important; top: 0; }
uj5u.com熱心網友回復:
Array.map作品。讀取obj2as 陣列的值以映射到預期結果。我猜想物件鍵A,B可以忽略不計。
const obj1 = [ { id: 1, name: 'foo' }, { id: 2, name: 'bar' } ];
const obj2 = { A: { id: 1, externalId:'AAA' }, B: { id: 2, externalId:'BBB' } };
const result = Object.values(obj2).map(({id, externalId}) => ({
id: externalId, name: obj1.find(item => item.id === id)?.name
}));
console.log(JSON.stringify(result));
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/347678.html
標籤:javascript 数组 目的
上一篇:如何在批處理腳本中列印
