3 回答

TA貢獻(xiàn)1946條經(jīng)驗(yàn) 獲得超3個(gè)贊
如果您想要一個(gè)完全不依賴于硬編碼的解決方案 - 即沒有"btob"或"ctob",您可以使用 a.map()來循環(huán)objList。對于其中的每個(gè)項(xiàng)目,循環(huán)遍歷它的所有鍵/值對,并使用.find(). 這也使您的原始對象保持原樣,而不是覆蓋它。
考慮下面的示例,其中我添加了一個(gè)額外的鍵來演示可擴(kuò)展性。
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);
添加回答
舉報(bào)