2011-11-09 15 views
5

Ho una funzione che cerca attraverso una serie di stringhe. Funziona perfettamente, fatta eccezione per la sua distinzione tra maiuscole e minuscole. Ho bisogno che sia insensibile al maiuscolo/minuscolo.Difficoltà nella conversione di una matrice di stringhe in LowCase e aggiunta alla mia funzione. Javascript

Il modo più semplice sarebbe rendere la funzione convertire l'array in lettere minuscole, quindi quando la funzione esegue una ricerca attraverso l'array, è in grado di trovarlo, indipendentemente dal suo caso.

Ho provato ad aggiungere var array_name_tolowercase = array_name.toLowerCase(); alla mia funzione in modo che quando viene chiamata la funzione, possa funzionare su tutti gli array; se necessario.

Mi dispiace di non essermi chiarito affatto, se questo è il caso, per favore fatemelo sapere e farò del mio meglio per ri-spiegare. Grazie in anticipo!

+0

Mostraci il codice per la tua funzione in modo che possiamo consigliare come renderlo case insensitive. – jfriend00

+0

Grazie ragazzi, l'ho ordinato! Grazie! –

risposta

4

Sarà necessario convertire i elementi dell'array in minuscolo, non l'oggetto Array stesso. Non so esattamente ciò che accade all'interno della vostra funzione, ma qualcosa di simile:

for(var i = 0; i < arrayName.length; i++) { 
    if(arrayName[i].toLowerCase() === "whatever") { 
     //Found a match! 
    } 
} 

Messaggio ancora un po 'di codice e sarà più facile per fornire una soluzione più precisa! Ecco uno example di cui sopra.

+0

Ciao, mi dispiace per essere stato così vago. Ho pubblicato qualche codice sopra. Grazie –

+0

Il tuo codice sembra funzionare per me: http://jsfiddle.net/interdream/BCqsb/1/ –

+0

Sono riuscito a capirlo. Grazie –

2

non si può chiamare toLowerCase sul oggetto array è necessario chiamare il singolo membro di matrice

6

Non è possibile utilizzare toLowerCase() su un array, a meno che non lo si estenda.

Mettere questo da qualche parte nel codice, quindi da qui in avanti, è possibile utilizzarlo su array (nota, solo se l'array è riempito con le stringhe)

Array.prototype.toLowerCase = function() { 
    for (var i = 0; i < this.length; i++) { 
     this[i] = this[i].toString().toLowerCase(); 
    } 
} 
3

array non hanno un metodo di toLowerCase. È possibile creare uno o solo chiamare a LowerCase su ogni stringa durante l'iterazione attraverso la matrice.

Array.prototype.toLowerCase = function() { 
    var i = this.length; 
    while (--i >= 0) { 
     if (typeof this[i] === "string") { 
      this[i] = this[i].toLowerCase(); 
     } 
    } 
    return this; 
}; 

Per il codice che hai postato, è possibile modificare var a = (array[i].indexOf(searchlow)); a

var a = (array[i].toLowerCase().indexOf(searchlow)); 
20

Il modo più semplice è quello di unire l'array mixed-case in una stringa, minuscole, quindi dividere la stringa di nuovo in un array .

Esempi:

var tmp = mcArray.join('~').toLowerCase() 
var lcArray = tmp.split('~') 
+0

Cosa succede se uno degli elementi dell'array contiene '~'? – Greg

+1

Abbastanza sciocco ... ovviamente questo significherebbe rovinare la logica. Questo presuppone che "~" sia un personaggio sicuro.Potresti usare qualsiasi altro personaggio. – LukeS

2

Personalmente, lo trovo molto più facile da fare in questo modo:

   array = ["Apples","Oranges","FRUIT"]; 
       console.log("array: "+array); //array: Apples,Oranges,FRUIT 
       arrayString = array.toString(); 
       arrayLowerString = arrayString.toLowerCase(); 
       arrayLower = arrayLowerString.split(","); 
       console.log("arrayLower: "+arrayLower); //apples,oranges,fruit 
+0

Funziona, o forse potresti semplicemente concatenare tutti e tre i metodi in uno? 'var arrayLowerString = array.toString(). ToLowerCase(). Split (',')' –

0
function(resp) { 
    return this.colors.filter(function(color) { 
     return color.toLowerCase() === resp.toLowerCase(); 
    })[0]; 
} 
0

array_name_tolowercase = array_name.map (x => x.toLowerCase)

Problemi correlati