Summarize array of objects and calculate average value for each unique object name

前端 未结 6 1781
忘了有多久
忘了有多久 2020-12-17 02:31

I have an array like so:

var array = [
     {
       name: \"a\",
       value: 1 
     },
     {
       name: \"a\",
       value: 2 
     },
     {
                


        
6条回答
  •  温柔的废话
    2020-12-17 03:34

    And a possible solution using ECMA5 (as we seem to be missing one)

    var sums = {},
        averages = Object.keys(array.reduce(function (previous, element) {
            if (previous.hasOwnProperty(element.name)) {
                previous[element.name].value += element.value;
                previous[element.name].count += 1;
            } else {
                previous[element.name] = {
                    value: element.value,
                    count: 1
                };
            }
    
            return previous;
        }, sums)).map(function (name) {
            return {
                name: name,
                average: this[name].value / this[name].count
            };
        }, sums);
    

    On jsFiddle

提交回复
热议问题