2017-01-04 1 views
1

누군가 내가 여기서 잘못하고있는 것을 보여줄 수 있는지 궁금 해서요. _.reduce를 사용하여 개체의 필드를 얻으려고 시도 할 때마다 매번 '첫 번째'필드가 누락 된 것 같습니다.Lodash _. 문제를 개선 하시겠습니까?

첫 번째 줄은 일반 js이고, 다음 줄은 lodash입니다. $의 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)입니다

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

:

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

는 첫 번째 요소를 실종, 내가 ' 이후 위험해질 것 같아. 당신은 초기 누적기를 설정하지 않았습니다. 첫 번째 요소를 초기 누적기로 사용하고, 두 번째 요소에서 접기를 시작합니다.

참고, 나는 모르겠다. 이것은 단지 행동을 줄이는 표준입니다. 초기 어큐뮬레이터를 설정하는 방법을 보려면 설명서를 참조하십시오.

목록이 항상 비어 있지 않다는 것을 알지 못하는 경우를 제외하고는 초기 누적기를 설정하는 것이 좋습니다. 설정하지 않고 빈 목록을 줄이거 나 던지거나 undefined을 반환합니다 (lodash의 동작에 따라 다름). 이러한 실패를 고려하지 않고 길을 놀라게 할 수 있습니다.

0

누산기를 추가하면 작동합니다.

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

감소 함수는 콜렉션을 단일 값으로 줄이기 위해 사용됩니다. 매번 그것을 통해 이전 값을 기반으로 누적, 따라서 첫 번째 문제. 다른 말로 표현하자면 (다른 사람들이 보여 주듯이) 작업을 할 수는 있지만 작업에 잘못된 도구입니다.

이 경우 필요한 것은 간단한 루프 (또는 이미 알고 있듯이 Object.keys)입니다.