2015-06-22 152 views
0

我從外部源檢索值並將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 
    } 
}); 

結果是控制檯例如可以是:
基斯 - 103,4
馬科 - 44.1
賈裏德 - 89,8
基斯 - 66,2
傑夫 - 23 3
marco - 69,4

我想結合所有重複的名稱和總結重複的數字,並把它們放在一個數組中。所以結果會是這樣,例如:
基斯 - 169,6
馬爾科 - 113,5
賈裏德 - 89.8
傑夫 - 23.3

什麼是實現這一目標的最佳/最簡單的方法是什麼?

+2

安置自己的輸入例如,在實際的數據結構。 – elclanrs

回答

2

您不能在array中存儲key-value對。使用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 
    } 
}); 
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

相關問題