3 回答

TA貢獻1946條經驗 獲得超3個贊
如果您想要一個完全不依賴于硬編碼的解決方案 - 即沒有"btob"或"ctob",您可以使用 a.map()來循環objList。對于其中的每個項目,循環遍歷它的所有鍵/值對,并使用.find(). 這也使您的原始對象保持原樣,而不是覆蓋它。
考慮下面的示例,其中我添加了一個額外的鍵來演示可擴展性。
var newObj = [
{ "id": "service", "name": "bank", "amount": 2000 },
{ "id": "service", "name": "credit", "amount": 5000 },
{ "id": "test", "name": "test", "newKey": "Hello world!"}
];
var objList = [
{ "btob": [{ "id": "service", "name": "bank", "amount": 1000 },{ "id": "fund", "name": "bank", "amount": 2000 },{ "id": "others", "name": "bank", "amount": 5000 }] },
{ "ctob":[{ "id": "service", "name": "credit", "amount": 1000, "rate": 0.4 },{ "id": "fund", "name": "credit", "amount": 3000, "rate": 0.2 },{ "id": "others", "name": "credit", "amount": 4000, "rate": 0.6 }]},
{ "dtob": [{ "id": "test", "name": "test"}]}
];
let result = objList
.map(root => Object.keys(root)
.reduce((output,key) => (
{...output, [key]: root[key]
.flatMap(i => {
let replacement = newObj.find(f => i.id === f.id && i.name === f.name);
return replacement ? {...i, ...replacement} : i;
})
}
), {})
);
console.log(result);
添加回答
舉報