如何使用reduce方法返回基于其内部if条件的分组和



我想运行reduce以获得一个基于输入对象中option属性的具有两个属性的对象。请检查下面的代码和预期输出:

我有以下数据片段:

const data = [
{
"id":215,
"option":"PP",
"amount":50
},
{
"id":215,
"option":"PP",
"amount":100
},
{
"id":215,
"option":"VP",
"amount":250
}
];
const result = data.reduce((prevValue, currentValue) => {
if (currentValue.option == 'PP') {
prevValue += currentValue.amount;
}
return prevValue;
}, 0);
console.log(result);

目前,这只返回"0"的总和;PP";选项,但我想在一个结果对象中同时获得这两个选项。

预期输出

{
"Total PP" => 150,
"Total VP" => 250
}

由于您希望从对reduce的调用中返回一个对象,因此应该将一个对象作为初始值传递给它。然后使用动态属性访问来区分这两个类别:

const data = [{"id":215,"option":"PP","amount":50},{"id":215, "option":"PP","amount":100},{"id":215, "option":"VP","amount":250}];
const result = data.reduce((acc, item) => {
acc["Total " + item.option] += item.amount;
return acc;
}, { "Total PP": 0, "Total VP": 0 });
console.log(result);

这假设option属性将仅具有这两个值。如果不是这样的话,你需要使更新成为有条件的:

const data = [{"id":215,"option":"PP","amount":50},{"id":215, "option":"PP","amount":100},{"id":215, "option":"VP","amount":250}];
const result = data.reduce((acc, item) => {
if ("Total " + item.option in acc) {
acc["Total " + item.option] += item.amount;
}
return acc;
}, { "Total PP": 0, "Total VP": 0 });
console.log(result);

代码本身存在多个问题,我希望这对您的有用

const result = data.reduce((acc, currentValue) => {
acc[currentValue.option] += currentValue.amount;
return acc;
}, { PP: 0, VP: 0 });

最新更新