2013-09-29 1 views
0

Problème mineur. J'ai la collectionComment puis-je parcourir une collection avec underscore.js/lodash.js

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

et que vous souhaitez l'accès/fetch chaque 'surname' et 'nickname'. J'ai essayé différentes options sans aucune chance (par exemple, _.each/_.map).

Y a-t-il quelqu'un ayant de l'expérience dans ce domaine?

+1

Pouvez-vous ajouter le javascript objet/tableau souhaité que vous espérez tirer de tout cela? "Access/fetch" est un peu ambigu. – ne8il

Répondre

5

Cet extrait transformera la structure que vous avez là dans quelque chose qui est plus facile de travailler avec:

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

Voici les noms sera un tableau d'objets avec chaque objet ayant un nom de famille et un surnom:

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

Une fois que vous avez cette structure, il est facile de manipuler ce tableau pour extraire ce que vous voulez, par exemple obtenir tous les noms de famille:

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

Belle réponse. – 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); 
Questions connexes