我有這兩個陣列:
const goodCars = [
{ name: 'ferrari', price: 22000, condition: { isGood: true, isBad: false } },
{ name: 'ford', price: 21000, condition: { isGood: true, isBad: false } },
{ name: 'bmw', price: 20000, condition: { isGood: true, isBad: false } },
];
const badCars = [
{ name: 'ford', price: 1111, condition: { isGood: false, isBad: true } },
{ name: 'honda', price: 8000, condition: { isGood: false, isBad: true } },
];
我的目標是生成這個最終陣列:
const finalCarList = [
{ name: 'ferrari', price: 22000, condition: { isGood: true, isBad: false } },
{
name: 'ford',
price: 21000,
condition: { isGood: true, isBad: false },
toCompareWith: { name: 'ford', price: 1111, condition: { isGood: false, isBad: true } },
},
{ name: 'bmw', price: 20000, condition: { isGood: true, isBad: false } },
{ name: 'honda', price: 8000, condition: { isGood: false, isBad: true } },
];
基本上我想將兩個goodCars和badCars陣列合并為一個,但是如果汽車同時存在于 good 和 badd 陣列中,那么我想將壞車作為新欄位添加到好車陣列中toCompareWith: {...}(見上圖)
我試過使用map(), reduce(),for回圈等,但我的大腦撞到了墻,我沒有走得更近。
我的嘗試:
goodCars.map((gc) => {
badCars.map((bc) => {
if (isCarMatch(gc, bc)) {
finalCarList = [
...finalCarList,
{ ...gc, toCompareWith: bc },
];
}
});
});
uj5u.com熱心網友回復:
您不應該使用嵌套回圈。
首先復制goodCars到finalCarList. 然后回圈badCars。如果汽車在goodCars,則將壞汽車添加為toCompareWith屬性。否則,將其推入finalCarList.
finalCarList = [...goodCars];
badCars.forEach(bc => {
match = goodCars.find(gc => isCarMatch(gc, bc));
if (match) {
match.toCompareWith = bc;
} else {
finalCarList.push(bc);
}
});
此外,一般來說,map()如果回呼函式不回傳任何內容,則不應使用。如果它只是為了副作用而呼叫,請使用forEach().
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/363211.html
標籤:javascript 数组
上一篇:無法在鍵值存盤中設定未定義的屬性
下一篇:加載第一個腳本后如何使腳本執行
