2013-04-27 12 views
9
var sorted = words.map(function(value) { 
    return value.toLowerCase(); 
}).sort(); 

Questo codice restituisce tutti i valori da parole array in minuscolo e le ordina, ma io voglio fare lo stesso con un ciclo for ma non ci riesco.restituire tutti i valori dalla matrice in minuscolo utilizzando ciclo for, invece di mappa

ho provato:

for (var i = 0; i < words.length; i++) { 
    sorted = []; 
    sorted.push(words[i].toLowerCase()); 
}; 
+2

Un suggerimento per riferimento futuro: quando si aggiorna il codice in una domanda come risultato di una delle risposte, si prega di non modificare il codice originale (errato). Invece, mantieni il codice originale invariato e aggiungi una nuova sezione alla fine della domanda come "Ho modificato il codice come suggerito nella risposta di XYZ, ma non funziona ancora. Ecco il nuovo codice: ..." In questo modo la domanda e le risposte avranno molto più senso per i futuri visitatori. –

+1

Vero, lo farò. Grazie. –

risposta

7

Con gli array, l'operatore += non fa quello che ci si aspetta - si chiede .toString sulla matrice e li concatena. Invece, si desidera utilizzare la array push method: spinta

var sorted = []; 
for (var i = 0; i < words.length; i++) { 
    sorted.push(words[i].toLowerCase()); 
} 
sorted.sort(); 
+0

Ho aggiornato un po 'il codice (vedere), ma ora restituisce solo 1 elemento, non tutti. –

+2

Hai il tuo 'ordinato = [];' all'interno del ciclo - dove sovrascrive l'array con uno nuovo ripetutamente (e verrà restituito solo l'ultimo, con l'ultimo elemento). Vedi la mia risposta su come dovrebbe apparire il codice. – Bergi

+0

Sì, ho confrontato il tuo codice e il mio e ho capito che era il problema. Grazie! –

0

toLowerCase() è la funzione, si dovrebbe scrivere () dopo che

+0

errore stupido. ancora non funziona però –

0

Il metodo toLowerCase non viene chiamato nel codice, ma solo di riferimento. Modifica la tua linea nel ciclo su:

sorted += words[i].toLowerCase(); 

Aggiungi() per chiamare il metodo.

codice di lavoro completo:

var words = ["FOO", "BAR"]; 
var sorted = []; 

for (var i = 0; i < words.length; i++) { 

     sorted.push(words[i].toLowerCase()); 
}; 

console.log(sorted); 
0

sto supponendo che si sta dichiarando sorted come un array. In tal caso utilizzare il metodo push piuttosto che +=:

for (var i = 0; i < words.length; i++) { 
    sorted.push(words[i].toLowerCase()); 
} 
30

è abusata.

for (var i = 0, L=words.length ; i < L; i++) { 
    sorted[i]=words[i].toLowerCase(); 
} 

Se si vuole veloce e hanno una vasta gamma di parole, chiamare toLowerCase una volta-

sorted=words.join('|').toLowerCase().split('|'); 
+3

+ per il secondo – ZuzEL

+0

bel trucco – Martial

1

So che questa è una risposta più tardi, ma ho trovato un modo piuttosto diretto e facile!

yourArray = ['this', 'iS an', 'arrAy']; 
console.log(yourArray); // ["this", "iS an", "arrAy"] 

yourLowerArray = yourArray.toLocaleString().toLowerCase().split(','); 
console.log(yourLowerArray); //["this", "is an", "array"] 

Spiegare ciò che fa:

.toLocaleString() -> trasformare l'array in una stringa separata da virgole.

.toLowercase() -> converti quella stringa in minuscolo.

.split(',') -> convertire la stringa in minuscolo in un array.

Spero che questo ti aiuti!

11

È inoltre possibile ora raggiungere questo obiettivo in modo molto semplice utilizzando una funzione di freccia e il metodo della matrice map():

var words = ['Foo','Bar','Fizz','Buzz']; 
 
words = words.map(v => v.toLowerCase()); 
 

 
console.log(words);

Si noti che questo funziona solo nei browser che supportano ES2015. In altre parole, qualsiasi cosa eccetto IE8 e inferiore.

Problemi correlati