【问题标题】:Sum value form array in object对象中的求和值形式数组
【发布时间】:2016-08-19 05:49:51
【问题描述】:

我有一个对象:

var stuffData = {
    'Fruit': [{
        'Name': 'Apple',
        'Price': '2'
    }, {
        'Name': 'Kiwi',
        'Price': '4'
    }],
    'Sport': [{
        'Name': 'Ball',
        'Price': '10'
    }, {
        'Name': 'Bike',
        'Price': '120'
    }],
    'Kitchen': [{
        'Name': 'Knife',
        'Price': '8'
    }, {
        'Name': 'Fork',
        'Price': '7'
    }]
}

现在我想从价格列获取总和。

我想过这个

for (var key in stuffData)
   {
     // and for each key i have to add new array with sum of price or what?
     // But how will I display this sum then?
     // I haven't any idea how can I deal with this        
   }

【问题讨论】:

  • 您想要所有 Price 值的总和,无论类别如何?
  • 每个类别都有自己的总和
  • 也许你应该发布你想要的结果,向我们展示格式等。

标签: javascript arrays node.js object


【解决方案1】:

感谢您的每一个回答。最佳解决方案如下:

   var sum = {};
    for (var k in stuffData)
    {
       sum[k] = 0;
       stuffData[k].forEach(function (e)
       {
          sum[k] += parseInt(e.price);
       });
    }

【讨论】:

    【解决方案2】:

    您可以使用Array.prototype.reduce 对列表求和。

    var categorySums = {};
    for(category in stuffData) {
        var items = stuffData[category]; 
        categorySums[category] = items.reduce(function (sum, item) { 
             return sum + parseInt(item.Price);
        }, 0);
    }
    

    如果您使用库 lodash(或类似的东西,例如下划线或 Ramda),他们有一个 mapValues 实用程序可以简化此操作:

    var categorySums = _.mapValues(stuffData, function(items) {
        return _.sum(items.map(function (item) {
            return parseInt(item.Price);
        }));
    });
    

    【讨论】:

      【解决方案3】:

      这样试试

      for (var key in stuffData) {
      var totalSum =0;
          if(stuffData[key] = 'Fruit'{
              for(var i=0; i< stuffData[key].length ; i++){
                  totalSum+=stuffData[key].price;
              }
          }
      
          if(stuffData[key] = 'Sport'{
              for(var i=0; i< stuffData[key].length ; i++){
                  totalSum+=stuffData[key].price;
              }
          }
      
          if(stuffData[key] = 'Kitchen'{
              for(var i=0; i< stuffData[key].length ; i++){
                  totalSum+=stuffData[key].price;
              }
      
          }
          console.log("TOTAL SUM",totalSum);
      }
      

      【讨论】:

        【解决方案4】:

        这样的事情应该可以工作,映射对象,并减少每个对象的总和

        var stuffData = {
            'Fruit': [{
                'Name': 'Apple',
                'Price': '2'
            }, {
                'Name': 'Kiwi',
                'Price': '4'
            }],
            'Sport': [{
                'Name': 'Ball',
                'Price': '10'
            }, {
                'Name': 'Bike',
                'Price': '120'
            }],
            'Kitchen': [{
                'Name': 'Knife',
                'Price': '8'
            }, {
                'Name': 'Fork',
                'Price': '7'
            }]
        }
        
        var o = {};
        
        Object.keys(stuffData).forEach(function(key) {
            o[key] = stuffData[key].map(function(item) {
            	return parseInt(item.Price, 10);
            }).reduce(function(a,b) {
            	return a + b;
            });
        });
        
        document.body.innerHTML = '<pre>' + JSON.stringify(o, 0, 4) + '</pre>';

        结果是

        {
            Fruit: 6, 
            Sport: 130, 
            Kitchen: 15
        }
        

        【讨论】:

          猜你喜欢
          • 2016-09-05
          • 2020-09-27
          • 2021-08-09
          • 2018-06-22
          • 2022-12-04
          • 1970-01-01
          • 2019-09-17
          • 2020-06-22
          • 1970-01-01
          相关资源
          最近更新 更多