如何使用underscore.js/lodash.js遍历集合

Chr*_*ter 0 collections underscore.js lodash

小问题.我收藏了

var allnames = {
    'names': 
     [
         { 'name': [ {'surname': 'moe'}, {'nickname': 'moose' } ] },
         { 'name': [ {'surname':'larry'}, {'nickname': 'lark' } ] }
     ]
};
Run Code Online (Sandbox Code Playgroud)

并希望访问/获取每个'surname''nickname'.

我没有运气就尝试了不同的选择(例如_.each/ _.map).

有人在这方面有经验吗?

Gru*_*nny 5

这个片段会将您拥有的结构转换为更容易使用的结构:

 var names = _.map( allnames.names, function(n){
    // n is an array with each object having one property; either a surname or a nickname
    return _.reduce(n.name, function(memo,part){ return _.extend(memo,part); }, {})
 });
Run Code Online (Sandbox Code Playgroud)

这里的名称将是一个对象数组,每个对象都有一个姓氏和一个昵称:

[ { surname: 'moe', nickname: 'moose' }, { surname: 'larry', nickname: 'lark' } ]
Run Code Online (Sandbox Code Playgroud)

一旦你有了这个结构,很容易操纵该数组来提取你想要的东西,例如得到所有的姓氏:

var surnames = _.pluck(names, 'surname');
var nicknames = _.pluck(names, 'nickname');
Run Code Online (Sandbox Code Playgroud)