這個問題在這里已經有了答案: 對物件陣列中的相似鍵求和 (10 個回答) 46 分鐘前關閉。
我有一個主陣列 -
const arr = [
{ description: 'Senior', amount: 50 },
{ description: 'Senior', amount: 50 },
{ description: 'Adult', amount: 75 },
{ description: 'Adult', amount: 35 },
{ description: 'Infant', amount: 25 }
]
我需要 es6 操作的幫助,該操作將根據鍵(描述)添加數量并洗掉重復項。
結果陣列有點像 -
const newArr = [
{ description: 'Senior', amount: 120 },
{ description: 'Adult', amount: 110 },
{ description: 'Infant', amount: 25 }
]
我可以通過回圈遍歷陣列并執行如下操作來實作這一點 -
const finalArr = [];
let temp;
for (let i = 0; i < arr.length; i ) {
if (temp) {
if (temp.description == arr[i].description) {
emp.amount = arr[i].amount;
} else {
finalArr.push(temp);
temp = arr[i];
}
} else {
temp = arr[i];
}
}
finalArr.push(temp);
但是如果有人可以幫助我使用一些 es6 運算子來執行相同的操作,那將非常有幫助。
uj5u.com熱心網友回復:
- 使用
Array#reduce,迭代陣列,同時更新 aMap,其中鍵是 thedescription,值是 total 的記錄amount - 使用
Map#values,獲取分組物件的串列
const arr = [ { description: 'Senior', amount: 50 }, { description: 'Senior', amount: 50 }, { description: 'Adult', amount: 75 }, { description: 'Adult', amount: 35 }, { description: 'Infant', amount: 25 } ];
const res = [...
arr.reduce((map, current) => {
const { description } = current;
const grouped = map.get(description);
if(!grouped) {
map.set(description, { ...current });
} else {
map.set(description, { ...grouped, amount: grouped.amount current.amount })
}
return map;
}, new Map)
.values()
];
console.log(res);
uj5u.com熱心網友回復:
你可以只使用這個片段
array.filter((item, index) => array.indexOf(item) === index);
有關更多詳細資訊,請參閱此鏈接。或者只是復制這個解決方案。
uj5u.com熱心網友回復:
const arr = [
{ description: "Senior", amount: 50 },
{ description: "Senior", amount: 50 },
{ description: "Adult", amount: 75 },
{ description: "Adult", amount: 35 },
{ description: "Infant", amount: 25 },
];
const result = Object.values(
arr.reduce((acc, item) => {
acc[item.description] = acc[item.description]
? { ...item, amount: item.amount acc[item.description].amount }
: item;
return acc;
}, {})
);
console.log(result);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/378023.html
標籤:javascript 数组 ecmascript-6 javascript对象
