合并和求和值并将它们放在数组中

时间:2015-06-22 09:15:24

标签: javascript arrays angularjs foreach

我正在从外部源检索值,并使用下面的代码将foreach循环应用于结果。

angular.forEach(data, function(value, key) {
    if (value.start_date > firstdayOfWeek && value.start_date < lastdayOfWeek) {
        console.log(value.firstname + ' - ' + value.distance);
    } else {
        //do nothing
    }
});

结果是控制台例如可以是:
kees - 103,4
marco - 441 贾里德 - 89,8
kees - 66,2
jef - 23,3
marco - 69,4

我想将所有重复的名称组合在一起,并将重复项的数量相加并将它们放在一个数组中。所以结果将是这样的例如:
kees - 169,6
marco - 113,5
贾里德 - 89.8
jef - 23.3

实现这一目标的最佳/最简单方法是什么?

2 个答案:

答案 0 :(得分:2)

您无法在key-value中存储array对。

使用object存储键值对。

在代码中查看内联注释。

var obj = {}; // Initialize the object

angular.forEach(data, function(value, key) {
    if (value.start_date > firstdayOfWeek && value.start_date < lastdayOfWeek) {
        if (obj[value.firstname]) { // If already exists
            obj[value.firstname] += value.distance; // Add value to previous value
        } else {
            obj[firstname] = value.distance; // Add in object
        }
    } else {
        //do nothing
    }
});
console.log(obj); // Result

缩短版本

var obj = {}; // Initialize the object

angular.forEach(data, function(value, key) {
    if (value.start_date > firstdayOfWeek && value.start_date < lastdayOfWeek) {
        obj[value.firstname] = obj[value.firstname] ? obj[value.firstname] + value.distance : obj[value.firstname];
    } else {
        //do nothing
    }
});

答案 1 :(得分:0)

替代方法是使用Underscore

 var data = [ {key: "kees", value:103.4},
             {key: "marco", value:44.1},
             {key: "jared", value:89.8},
             {key: "kees", value:66.2},
              {key: "marco", value:69.4},];



var groups = _(data).groupBy('key');

$scope.out = _(groups).map(function(gr, key) {
  return { 
     type: key, 
     val: _(gr).reduce(function(m,x) { 
       return m + x.value;
     }, 0) 
  };
});

输出:

[
  {
    "type": "kees",
    "val": 169.60000000000002
  },
  {
    "type": "marco",
    "val": 113.5
  },
  {
    "type": "jared",
    "val": 89.8
  }
]
Fiddle

中的

演示