我正在从外部源检索值,并使用下面的代码将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
实现这一目标的最佳/最简单方法是什么?
答案 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 中的演示