2014-01-31 30 views
-1

我有以下幾點:如何使用lodash _.forEach實現.forEach本地?

var new = {}; 
old.forEach(function (u) { new[u.id] = u.name; }); 

有人能向我解釋,我怎麼能使用隨lodash的_.forEach實現這一點。

+1

非常簡單:'_.forEach(舊,函數(U){新[u.id] = u.name;});'。你在文檔中不理解的是什麼? http://lodash.com/docs#forEach –

+0

@Felix - 我認爲lodash總是產生一個輸出,我將不得不使用它。所以我想這將是更喜歡的:var新= _.foreach(..有沒有辦法做到這一點還是我總是需要做新的[u.id] –

回答

1

我想lodash總是產生的輸出,我不得不使用它。

不,這真的取決於功能。 _.forEach只是迭代集合的元素。儘管它確實返回一個值,它只是您作爲第一個參數傳遞的集合。

所以我想這將是更喜歡:var new = _.foreach(..有沒有辦法做到這一點還是我總是需要做new[u.id}

你可以使用_.reduce,雖然我個人並不覺得比你的版本更具可讀性,因爲其目的不清晰:

var newObj = _.reduce(old, function(obj, v) { 
    obj[v.id] = v.name; 
    return obj; // or in one line: return obj[v.id] = v.name, obj; 
}, {}); 

理想情況下,你會使用類似_.map,這使得意圖要清楚得多,但是你不能從一個數組映射到一個對象,並且你不能從一個對象映射到一個含有lodash的對象(就像它看起來那樣)。

+2

有'_.zipObject':HTTP ://stackoverflow.com/questions/21450360/how-can-i-make-a-callback-function-in-the-lodash-foreach-populate-an-array/21451310#21451310 – phadej