[英]How to calculate each object in the array in separate array based on truthy condition?
我有這個數組
bidsList = [
{
supplierName:'A',
awardedCapacity:5,
switcherStatus: true
},
{
supplierName:'B',
awardedCapacity:10,
switcherStatus: true,
},
{
supplierName:'A',
awardedCapacity:5,
switcherStatus: false,
},
{
supplierName:'A',
awardedCapacity:3,
switcherStatus: true,
},
{
supplierName:'B',
awardedCapacity:5,
switcherStatus: true,
},
{
supplierName:'C',
awardedCapacity:2,
switcherStatus: false,
},
我需要有單獨的數組,當我通過這個數組進行迭代時,我將計算供應商名稱相同的所有獎勵容量的總數
例如我應該有一個數組,我將有這個 output
let newArr = [
{
supplierName: 'A',
totalAwarded: 13,
},
{
supplierName:'B',
totalAwarded: 15,
},
{
supplierName:'C',
totalAwarded: 2,
}
]
解決方案是:
let newArr = [];
bidsList.reduce(function(acc, val) {
if (!acc[val.supplierName]) {
acc[val.supplierName] = { supplierName: val.supplierName, awardedCapacity: 0 };
newArr.push(acc[val.supplierName])
}
acc[val.supplierName].awardedCapacity += val.awardedCapacity;
return acc;
}, {});
console.log(newArr);
但現在我還需要檢查 switcherStatus 是否僅設置為 true - 如果它設置為 false,我不應該計算它的獎勵容量,如果它是唯一的一個 object,我不應該推入數組
所以 output 應該是
let newArr = [
{
supplierName: 'A',
totalAwarded: 8,
},
{
supplierName:'B',
totalAwarded: 15,
},
]
C
在這里被排除,因為它是 switcherStatus 假,而 A 是 8 - 因為在 object 上是 switcherStatus 為假
為此,我找不到在這里修改此減少代碼的方法。
只需在您的reduce
function 中添加一個條件
var bidsList = [{ supplierName: 'A', awardedCapacity: 5, switcherStatus: true }, { supplierName: 'B', awardedCapacity: 10, switcherStatus: true, }, { supplierName: 'A', awardedCapacity: 5, switcherStatus: false, }, { supplierName: 'A', awardedCapacity: 3, switcherStatus: true, }, { supplierName: 'B', awardedCapacity: 5, switcherStatus: true, }, { supplierName: 'C', awardedCapacity: 2, switcherStatus: false, } ]; var result = bidsList.reduce((a, c) => { if (c.switcherStatus) { let supplier = a.find(e => e.supplierName == c.supplierName); if (supplier) supplier.totalAwarded += c.awardedCapacity; else a.push({ supplierName: c.supplierName, totalAwarded: c.awardedCapacity }); } return a; }, []); console.log(result);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.