如何提取对象的值并计算它们?

时间:2019-03-05 13:00:06

标签: javascript

伙计们,我不知道该如何提取对象中的属性值然后计算它们。

所以我有以下内容

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

3 个答案:

答案 0 :(得分:8)

您可以使用reduceternary operatordestructuring 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);

上面的方法将获得属性topUpvalue,如果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页。