伙计们,我不知道该如何提取对象中的属性值然后计算它们。
所以我有以下内容
const data = [
{
topUp: true, value: 200
},
{
topUp: true, value: 18
},
{
topUp: false, value: 20
},
{
topUp: true, value: 100
},
]
const totalSpending = data.filter(
transaction => transaction.topUp == true
);
现在我应该得到3个对象。从这里开始,我想获取每个[200,18,100]之类的值,并将它们加在一起,这样我的const totalSpending
将为318
答案 0 :(得分:8)
您可以使用reduce,ternary operator和destructuring assignment相对容易地实现这一目标:
const data = [{topUp: true, value: 200}, {topUp: true, value: 18}, {topUp: false, value: 20}, {topUp: true, value: 100}],
res = data.reduce((acc, {topUp, value}) => topUp ? acc + value : acc, 0);
console.log(res);
上面的方法将获得属性topUp
和value
,如果value
为true,则将topUp
添加到累加器(即总和)中false
,它将返回acc
(因此不会添加到总和)。
或者,您可以删除三元数并使用带有布尔值的数学运算符:
const data = [{topUp: true, value: 200}, {topUp: true, value: 18}, {topUp: false, value: 20}, {topUp: true, value: 100}],
res = data.reduce((acc, {topUp, value}) => acc + value*topUp, 0);
console.log(res);
答案 1 :(得分:1)
您也可以使用reduce
,这是数组上可用的高阶函数,它将过滤并添加值。
const data = [{
topUp: true,
value: 200
},
{
topUp: true,
value: 18
},
{
topUp: false,
value: 20
},
{
topUp: true,
value: 100
},
]
const totalSpending = data.reduce((aggregator, obj) => {
return obj.topUp ? aggregator + obj.value : aggregator
}, 0)
console.log(totalSpending)
答案 2 :(得分:0)
您可以使用Array.reduce
const data = [
{
topUp: true, value: 200
},
{
topUp: true, value: 18
},
{
topUp: false, value: 20
},
{
topUp: true, value: 100
},
]
const totalSpending = data.filter(
transaction => transaction.topUp == true
).reduce((previousValue, nextValue) => {
return previousValue + nextValue.value;
}, 0);
console.log(totalSpending);
它循环遍历列表中的每个条目,并将其减少为单个值。另请参见w3schools页。