2013-09-29 40 views
0

小問題。我有收集如何通過使用underscore.js/lodash.js迭代集合

var allnames = { 
    'names': 
    [ 
     { 'name': [ {'surname': 'moe'}, {'nickname': 'moose' } ] }, 
     { 'name': [ {'surname':'larry'}, {'nickname': 'lark' } ] } 
    ] 
}; 

,並希望訪問/提取每個'surname''nickname'

我嘗試過不同的選擇,沒有任何運氣(例如_.each/_.map)。

有沒有人在這方面有經驗?

+1

你能添加所需的JavaScript對象/數組你希望從這個提取? 「訪問/獲取」有點含糊不清。 – ne8il

回答

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); }, {}) 
}); 

這裏名稱將是具有姓氏和暱稱與每個對象對象數組:

[ { surname: 'moe', nickname: 'moose' }, { surname: 'larry', nickname: 'lark' } ] 

一旦你有了這個結構,很容易操縱該數組來提取你想要的東西,例如讓所有的姓氏:

var surnames = _.pluck(names, 'surname'); 
var nicknames = _.pluck(names, 'nickname'); 
+1

美麗的答案。 – jessegavin

0
I eventually found a solution, which covers what I was striving at 

var allnames = { 
    'names': 
    [ 
     { 'name': [ {'surname': 'moe'}, {'nickname': 'moose' } ] }, 
     { 'name': [ {'surname': 'larry'}, {'nickname': 'lark' } ] } 
    ] 
}; 

var surnames = []; 
var nicknames = []; 

function nameproc(myobj) 
{ 
    if (myobj.surname) 
    { 
     surnames.push(myobj.surname); 
     return myobj.surname 
    } 
    if(myobj.nickname) 
    { 
     nicknames.push(myobj.nickname); 
     return myobj.nickname; 
    } 
} 

_.each(allnames.names, function(myobj) 
{ 
    _.each(myobj, function(nameobj) 
    { 
     var nameobj = _.each(nameobj,nameproc); 
    }); 
}); 

// Print out the surnames and nicknames 

console.log(surnames); 
console.log(nicknames);