如何在Angular JS中的对象数组中总结货币值

时间:2017-02-17 06:47:52

标签: javascript angularjs arrays

我有一个来自API调用的返回对象数组。对象结构看起来像这样......

enter image description here

像这样,数组可以包含n个对象。

我要做的是...... sum up all the values of all the object's selectedMapping.cost并显示总和。

但有一个问题是costs可能有点棘手。

它们可以是.30或978等格式,我们必须分别假设为0.30和978.00。它们可以为null或未定义,在这种情况下,我们必须将其默认为0.0

如何在Angular JS中获得总和?如何处理适当的转换并显示总和?

4 个答案:

答案 0 :(得分:1)

这似乎是使用reduce的好时机

const data = [
  {
    selectedMapping: {
      cost: ".30"
    }
  },
  {
    selectedMapping: {
      cost: "200"
    }
  },
  {
    selectedMapping: {
      cost: ".60"
    }
  },
  {
    selectedMapping: {
      cost: ".22"
    }
  },
  {
    selectedMapping: {
      cost: null
    }
  }];
  

const sumCost = (data) =>
  data.reduce(
    (cost, entry) => 
      cost + (parseFloat(entry.selectedMapping.cost) || 0), 
    0
  )
  

console.log(sumCost(data))

答案 1 :(得分:0)

希望我帮到你,然后我创造的这个掠夺者应该做你想做的事: https://embed.plnkr.co/zzQkybjND5xi2Uo7dNHZ/

只需迭代数组,检查null或undefined的值,如果这样设置为0.0并将所有值相加。

答案 2 :(得分:0)

这是我处理undefined / null项目的解决方案

const sum = items.reduce((prevVal,item)=>{
  const selectedMapping = item.selectedMapping || null
  const cost = (isNaN(selectedMapping) && 'cost' in selectedMapping)? Number(selectedMapping.cost) : 0 
  return prevVal + cost
},0)
console.log(sum.toFixed(2))

Here's a JSBin for it

And reference for JavaScript’s Map, Reduce, and Filter

答案 3 :(得分:0)

你可以映射数组并获得成本,然后使用ramdajs的R.sum方法

const array = [
  {
    selectedMapping: {
      cost: ".30"
    }
  },
  {
    selectedMapping: {
      cost: "200"
    }
  },
  {
    selectedMapping: {
      cost: ".60"
    }
  },
  {
    selectedMapping: {
      cost: ".10"
    }
  },];

const currency = array.map(curr=>parseFloat(curr.selectedMapping.cost))
R.sum(currency); 

here是执行此操作的代码排除。