我想运行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 });