2014-01-30 5 views
1

나는 다음과 같은 코드를 가지고 :lodash에서 콜백 함수를 만들려면 어떻게해야합니까? 배열을 채울 때마다?

$scope.option.cityMap = data.reduce(function (rv, v) { 
         rv[v.cityId] = v; 
         return rv; 
        }, {}); 

누군가가 내가 _.lodash 대해 forEach와이를 구현하는 방법을 말해 줄래? 문서를 살펴 봤지만 콜백 함수를 구현하여 배열을 생성하는 방법을 모르겠습니다. 모든 솔루션은 "필수적 스타일"보다 효율적으로 기능 도우미를 사용

$scope.option.cityMap = _.forEach(data, 
+0

'_.reduce'를 사용 하시겠습니까? – phadej

+0

_.reduce가 그렇게 효율적이지 않다는 것을 읽습니다. 그래서 forEach로 이것을 구현할 수있는 방법을 찾고있었습니다. – Alan2

답변

2

는 :

성능이 정말 문제가되는 경우
var cityMap = {}; 
var len = data.length; 
for (var i = 0; i < len; i++) { 
    cityMap[data[i].cityId] = data[i]; 
} 
// return cityMap; 

, 위의 기능을합니다. 외부에서 보면 (데이터 입력, 데이터 출력, 부작용 없음) 순수하고 기능적입니다.

또한 _.zipObject를 사용할 수 있습니다

var cityMap = _(data).map(data, function (v) { 
    return [v.cityId, v]; 
}).zipObject().value(); 

또는 reduce, 우리가 축적 rv (어떤 의미에서 부정 행위를) 복사하지 않는 한, 그것은뿐만 아니라 매우 효율적이어야한다.

var cityMap = _.reduce(data, function (rv, v) { 
    rv[v.cityId] = v; 
    return rv; 
}, {});