在对象数组中查找特定元素并添加它们

时间:2017-04-21 07:12:52

标签: javascript arrays object sum

假设我们有一个像这样的对象数组:

dataSrc : 'features'

现在我想为这个数组创建一个sum变量,该变量包含cur isn&#t; t EUR和USD的amount字段的总和。更具体地说,我想要一个像array = [{ amount: 1000, cur: EUR }, { amount: 1500, cur: GBD }, { amount: 2000, cur: USD }, { amount: 2500, cur: SSL }] 这样的变量,它等于sumOther。此变量包含cur不是EUR和USD的金额之和。

4 个答案:

答案 0 :(得分:2)

过滤,减少,您已完成。

var sumOther = array
                .filter(y => y.cur != EUR && y.cur != USD)
                .reduce((a, b) => a.amount + b.amount);


< ES6版本:

var sumOther = array
            .filter(function(y) { return y.cur != EUR && y.cur != USD })
            .reduce(function(a, b) { return a.amount + b.amount });

答案 1 :(得分:2)

您可以使用一个简单的循环,在每次迭代时测试cur的值,并为所需的值添加总数。

或者您可以使用数组.filter().reduce()方法:

var array = [
  {amount: 1000, cur: 'EUR'},
  {amount: 1500, cur: 'GBD'},
  {amount: 2000, cur: 'USD'},
  {amount: 2500, cur: 'SSL'}
]

var total = array.filter(function(v) { return !/EUR|USD/.test(v.cur) })
                 .reduce(function(acc, current) { return acc + current.amount }, 0)
                 
console.log(total)

答案 2 :(得分:1)

您可以使用数组map方法

希望此代码段有用

var sum = 0; // define a variable for adding amount
array.map(function(item){
    // check if currency is not EUR or GBD, then update the sum
    if(item.cur !=='EUR' && item.cur !=='GBD'){
    sum = sum+item.amount
    }

})
console.log(sum)

DEMO

答案 3 :(得分:0)

排除字符串未经过硬编码的示例:

➜  ~ clang -g -fsanitize=memory st.cpp
➜  ~ ./a.out
==16031==WARNING: MemorySanitizer: use-of-uninitialized-value
    #0 0x490954  (/home/hailin/a.out+0x490954)
    #1 0x7f21b72f382f  (/lib/x86_64-linux-gnu/libc.so.6+0x2082f)
    #2 0x41a1d8  (/home/hailin/a.out+0x41a1d8)

SUMMARY: MemorySanitizer: use-of-uninitialized-value (/home/hailin/a.out+0x490954)
Exiting