2017-01-04 29 views
1

我想知道是否有人可以告訴我我在做什麼錯誤,我試圖用_.reduce來獲取對象中的字段,並且它似乎每次都缺少'第一'字段。Lodash _.reduce問題?

這裏的第一行是普通的老js,接下來是lodash。

$scope.actualKeys = Object.keys($scope.item); 
_.reduce($scope.item, function(result, value, key) { 
    $scope.keys.push(key); 
}); 

其中$ scope.item是

$scope.item = { 
field1: 'test', 
field2: 'test', 
field3: 'test', 
field4: 'test', 
field5: 'test', 
field6: 'test' 
}; 

https://plnkr.co/edit/J9MBahQNIsZkMFzrHjKG

回答

0

使用_.forEach()而不是_.reduce()plunk):

_.forEach($scope.item, function(value, key) { 
    $scope.keys.push(key); 
}); 
1

如果缺少第一個元素,我從那以後,我就會冒險猜測您尚未設置初始累加器,它將第一個元素用作初始累加器,然後在第二個元素上開始摺疊。

注意,我不知道lodash;這只是標準的減少行爲。查看文檔以瞭解如何設置初始累加器。

設置初始累加器通常是一個好主意,除非您確定該列表永遠不會爲空。如果不設置它,嘗試減少空列表將拋出或返回undefined(取決於lodash的行爲)。如果不考慮這些失敗情況,您可能會獲得驚喜。

0

如果你添加一個累加器,它將起作用。

$scope.actualKeys = Object.keys($scope.item); 
_.reduce($scope.item, function(result, value, key) { 
    $scope.keys.push(key); 
}, 0); 
0

reduce函數用於將集合減少爲單個值。每次通過它積累基於前一個值,因此你的問題與第一個。換句話說,雖然你可以使其工作(如其他人所示),但這是工作的錯誤工具。

你在這種情況下需要的是一個簡單的循環(或者,如你所知,Object.keys)。