前の記事
結論
reduceメソッド/groupByメソッドを使ってもっと簡単になる
type Order = {
name: string; // 商品名
price: number; // 値段
quantity: number; // 個数
}
const orders: Order[] = [
{ name: 'トマト', price: 100, quantity: 1 },
{ name: 'トマト', price: 100, quantity: 2 },
{ name: 'マンゴー', price: 200, quantity: 1 },
{ name: 'イチゴ', price: 250, quantity: 3 }
];
const reduceSameProductsKai = (orders: Order[]) => {
return Object.values(
Object.groupBy(orders, ({name}) => name)
)
.map( e => (e as Order[]).reduce(
(acc, e) =>
({...acc, quantity: acc.quantity + e.quantity})
)
)
}
console.log(reduceSameProductsKai(orders));
結果
[{
"name": "トマト",
"price": 100,
"quantity": 3
},
{
"name": "マンゴー",
"price": 200,
"quantity": 1
},
{
"name": "イチゴ",
"price": 250,
"quantity": 3
}]
この方法だと、indexが隣同士でない同じ種類のデータもマージできます。
トマトのindexがバラバラ
const orders: Order[] = [
{ name: 'トマト', price: 100, quantity: 2 },
{ name: 'マンゴー', price: 200, quantity: 1 },
{ name: 'トマト', price: 100, quantity: 2 },
{ name: 'トマト', price: 100, quantity: 3 },
{ name: 'イチゴ', price: 250, quantity: 3 },
{ name: 'トマト', price: 100, quantity: 1 },
];
結果
[{
"name": "トマト",
"price": 100,
"quantity": 8
}, {
"name": "マンゴー",
"price": 200,
"quantity": 1
}, {
"name": "イチゴ",
"price": 250,
"quantity": 3
}]
groupBy
なんていう超便利なインターフェースが実装されているとは知らなかった。
@ttatsfさん、教えてくださり、ありがとうございました!