【问题标题】:Find specific elements inside array of objects and add them在对象数组中查找特定元素并添加它们
【发布时间】:2017-04-21 07:12:52
【问题描述】:

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

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

现在我想为这个数组创建一个 sum 变量,其中包含 cur 不是 EUR 和 USD 的金额字段的总和。更具体地说,我想要一个像sumOther 这样的变量,它等于1500 + 2500 = 4000。此变量包含 cur 不是 EUR 和 USD 的金额的总和。

【问题讨论】:

    标签: javascript arrays object sum


    【解决方案1】:

    您可以只使用一个简单的循环,在每次迭代中测试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】:

      过滤,减少,你就完成了。

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



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

      【讨论】:

      • 注意这是 ES6。
      • 抱歉耽搁了,但这是不正确的。例如,如果我有三种不同的 cur,除了 EUR 和 USD,这个实现不起作用
      • 如果我有三种不同的货币,它会显示 NAN,如果我有一种,它会显示 null
      • 你能检查一下这个小提琴吗? jsfiddle.net/5e7qqzkk 我将 GBD 替换为 'GBD' 以便可以对其进行测试。但在我最初的示例中,我使用 GBD 作为变量,而不是字符串,就像您在问题中所做的那样,这可能是问题所在。
      【解决方案3】:

      可以使用数组map方法

      希望这个 sn-p 有用

      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

      【讨论】:

      • 如果你没有使用来自.map()的返回值,你应该使用.forEach(),因为你只是在迭代,而不是映射。
      • @nnnnnn 同意你的看法
      【解决方案4】:

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

      const array = [{amount: 1000, cur: 'EUR'}, 
      {amount: 1500, cur: 'GBD'}, 
      {amount: 2000, cur: 'USD'}, 
      {amount: 2500, cur: 'SSL'}];
      
      const exclude = ['EUR', 'USD'];
      
      var sum = array.map(x => (!exclude.includes(x.cur)) ? x.amount : false)
                     .reduce((a, b) => a + b);
      
      console.log(sum);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-21
        • 1970-01-01
        • 2014-05-01
        • 2017-07-22
        • 2016-08-18
        • 1970-01-01
        • 1970-01-01
        • 2021-11-09
        相关资源
        最近更新 更多