Sto cercando di ottenere un risultato simile a questo: Miniors | Boys | 54kg - 62kg
dove ogni valore delimitato da una pipe | proviene da una matrice che contiene un determinato "tipo di restrizione". Ad esempio: ageGroups, genders, weightClasses
(come visto sopra).Dinamico annidato per cicli da risolvere con ricorsione
Il modo in cui sono in grado di ottenere questo risultato adesso è se faccio un codice fisso per i loopEachid (usando underscorejs), ma questo significa che devo ora quanti array devo ricorrere per ottenere il risultato desiderato . Questo funziona "fine":
var categories = [];
_.each(ageGroups, function(ageGroup) {
_.each(gender, function(gender) {
_.each(weightClasses, function(weightClass) {
categories.push(ageGroup.name + ' | ' + gender.name + ' | ' + weightClass.name);
});
});
});
L'uscita è un array (categorie) con tutte le possibili combinazioni delle matrici di restrizione.
Ora, il mio problema è che ho bisogno di un modo per fare lo stesso con un numero sconosciuto di matrici di restrizione. La mia ipotesi di una soluzione adeguata è ricorsione, MA non sono stato in grado di produrre tutto ciò che funziona in realtà dato che non sono in grado di avvolgere la mia testa intorno ricorsione appena ancora :)
un violino preparato con alcuni dati di test può essere trovato qui: jsFiddle. Il violino usa l'angolare per un semplice calcolo dei dati e il debug dell'output dei risultati e dei underscorejs per la gestione degli array.
non Prova usare effetti collaterali (ad esempio 'push'ing su una matrice' categorie' globale), ma invece 'return' da ogni passo e usare' map' (e 'flatten') – Bergi
Hmm .. Okey. Appiattire non sarà di alcuna utilità qui poiché ho bisogno di una combinazione dei diversi valori dai diversi array. Ma la mappa potrebbe essere qualcosa .. Anche se non riesco a vedere come risolverebbe il problema, mi trovo ad affrontare una quantità dinamica di matrici. Ti interessa elaborare? – aup
Prova ad usare 'map' (anche in un modo non generico) e vedrai per cosa hai bisogno di' flatten'. Quindi, crea una funzione che utilizza i 'gruppi', l'indice del gruppo corrente (il" livello di nidificazione ") e i nomi correnti dei gruppi visitati. Il caso base (quando il livello di nidificazione ha raggiunto la lunghezza dei 'gruppi') restituirebbe quindi quei nomi correnti (uniti da' | '), il caso ricorsivo - lo capirai. – Bergi