2014-04-02 16 views
5

Ho una vasta matrice multidimensionale di oggetti JSON che voglio mappare attraverso (usando Underscore). Per esempio:Come mappare un array multidimensionale (usando Underscore)?

var dummyData = [ 
    [{title: 'a'},{title : 'b'}], 
    [{title: 'a'},{title : 'b'}], 
    [{title: 'a'},{title : 'b'}], 
    [{title: 'a'},{title : 'b'}] 
]; 

per il corpo della funzione del _.map, voglio correre ogni oggetto JSON attraverso un costruttore Backbone modello. qualcosa Finora, ho cercato in questo modo per raggiungere questo obiettivo:

_.map(dummyData, function() { 
    _.each(dummyData, function(el, i) { 
     // run each object through the constructor 
    } 
}) 

sto impigliarsi sulla _.each, anche se - in quanto dummyData non è in realtà la 'lista' che voglio loop through.

Oppure sto pensando a questo torto del tutto?

+0

si desidera che il risultato sia un array di array come il vostro ingresso? – thefourtheye

+0

Sì. Esattamente come l'input, ma ogni oggetto sarebbe un modello Backbone. – GloryOfThe80s

risposta

9

un'iterazione sugli elementi di dummyData, con _.map simili

_.map(dummyData, function(currentDummyData) { 
    return _.map(currentDummyData, function(el, i) { 
     // run each object through the constructor 
    }) 
}); 

dummyData è un array di array. Quando si utilizza _.map con questo, preleva ogni array nella matrice di array e passa alla funzione, che accettiamo con function(currentDummyData) {..}.

All'interno di quella funzione, abbiamo di nuovo _.map quella matrice, perché è ancora una matrice. Quindi, lo ripetiamo per ottenere singoli elementi e passarli alla funzione function(el, i) {..}, dove vengono creati nuovi modelli Backbone.

Nota: È necessario restituire il risultato di _.map, come nella risposta. Perché, _.map prevede la funzione chiamata per restituire un oggetto e tutti gli oggetti restituiti verranno raccolti per creare un nuovo array.

Per esempio,

console.log(_.map(dummyData, function(currentDummyData) { 
    return _.map(currentDummyData, function(el, i) { 
     return {title: el.title + el.title}; 
    }) 
})); 

produrrà

[ [ { title: 'aa' }, { title: 'bb' } ], 
    [ { title: 'aa' }, { title: 'bb' } ], 
    [ { title: 'aa' }, { title: 'bb' } ], 
    [ { title: 'aa' }, { title: 'bb' } ] ] 
Problemi correlati