2014-06-22 24 views
7

C'è un ciclo forEach in Lodash per gli array associativi? La funzione "forEach", chiamata , ho trovato, funziona solo per gli array indicizzati. Per esempio, se ho una matrice myArray con i valori [1, 2, 3], e fareLodash per Ogni array associativo

e eseguire la funzione (in Node), ottengo il risultato atteso:

1 
2 
3 

Tuttavia, quando provo questo con un array associativo, non funziona:

lodash = require('lodash'); 
myArray = []; 
myArray['valOne'] = 1; 
myArray['valTwo'] = 2; 
myArray['valThree'] = 3; 
lodash.forEach(myArray, function(index) { 
    console.log('7'); 
}); 

Come si può vedere l'esecuzione di questo Node, la funzione di callback d Non si attiva anche quando include qualcosa di diverso dagli elementi dell'array. Sembra solo saltare il loop interamente.

Prima di tutto, perché succede? In secondo luogo, esiste un'altra funzione inclusa in Lodash per questo problema o, in caso contrario, esiste un modo per utilizzare la funzione forEach per eseguire ciò, senza modificare l'array originale nel processo?

risposta

5

Lodash ha la funzione forOwn per questo scopo. Nel secondo array, se lo fai

_.forOwn(myArray, function(index) { 
    console.log(index); 
}); 

si dovrebbe ottenere il risultato previsto.

Non sono ancora sicuro del motivo per cui forEach sembra saltare la prima funzione, tuttavia, ma credo che possa avere a che fare con l'array che non ha una "lunghezza". Una lunghezza dell'array JavaScript è l'indice numerato più elevato che ha. Ad esempio, un array myOtherArray definito come myOtherArray[999]="myValue" avrà una lunghezza di 1.000 (poiché gli array sono a zero indice, ovvero iniziano da 0, non 1), anche se non ha altri valori. Ciò significa che un array senza indici numerati o solo indici negativi non avrà un attributo length. Lodash deve essere visualizzato su questo e non dare all'array un attributo length, probabilmente per mantenere la coerenza e le prestazioni, quindi non restituire alcun output.

6
myArray = []; 
myArray['valOne'] = 1; 
myArray['valTwo'] = 2; 
myArray['valThree'] = 3; 
lodash.forEach(myArray, function(index) { 
    console.log('7'); 
}); 

Un array associativo è solo un insieme di coppie di valori chiave, che non è altro che un oggetto Javascript. Sopra il caso - myArray.length === 0, Si stanno solo aggiungendo le proprietà all'oggetto matrice, non aggiungendo alcun valore all'array effettivo.

Invece inizializzare il myArray come questo e ciclo attraverso l'utilizzo di forIn

var myArray = {}; 
myArray['valOne'] = 1; 
myArray['valTwo'] = 2; 
myArray['valThree'] = 3; 

lodash.forIn(myArray, function(value, key) { 
    console.log(key + " : " + value); 
}); 

o semplicemente

var myArray = { 
    valOne : 1, 
    valTwo : 2, 
    valThree : 3 
    }; 

    lodash.forIn(myArray, function(value, key) { 
     console.log(key + " : " + value); 
    }); 

più su oggetti come array associativo here