2012-03-30 13 views
15

Sono interessato se esiste una funzione come array_map o array_walk da php.come mappare un array con la funzione maiuscola in javascript?

Non ce n'è bisogno per questo percorre tutto l'array. Posso farlo per me stesso.

var array = ['dom', 'lun', 'mar', 'mer', 'gio', 'ven', 'sab']; 
// i would like something like this if exists - function(array, 'upperCase'); 

risposta

19

È possibile utilizzare $.map() al fine di applicare String.toUpperCase() (o String.toLocaleUpperCase(), se del caso) ai vostri elementi di matrice:

var upperCasedArray = $.map(array, String.toUpperCase); 

Nota che $.map() costruisce un nuovo array. Se si desidera modificare l'array esistenti sul posto, è possibile utilizzare $.each() con una funzione anonima:

$.each(array, function(index, item) { 
    array[index] = item.toUpperCase(); 
}); 

Aggiornamento: Come Afanasy sottolinea giustamente nei commenti qui sotto, la mappatura String.toUpperCase direttamente funziona solo in Gecko browser basati su

Per supportare gli altri browser, è possibile fornire la propria funzione:

var upperCasedArray = $.map(array, function(item, index) { 
    return item.toUpperCase(); 
}); 
+2

String. toUpperCase non è definito quindi $ .map non funzionerà –

+0

@afanasy, true, probabilmente sto usando troppo Firefox. Ho aggiornato la mia risposta con una soluzione di mappatura portatile. –

4

Si potrebbe considerare l'utilizzo della libreria Underscore.js che fornisce operazioni funzionali standard.

Quindi il codice sarebbe stato semplice come:

_.map(array, function (x) { return x.toUpperCase(); }); 
+0

anche: '_.map (array, _.upperCase)' –

5

è possibile implementare una funzione per esso:

Array.prototype.myUcase=function() 
{ 
    for (i=0;i<this.length;i++) 
    { 
    this[i]=this[i].toUpperCase(); 
    } 
} 

USO

var fruits=["Banana","Orange","Apple","Mango"]; 
fruits.myUcase(); 

RISULTATO

BANANA,ORANGE,APPLE,MANGO 

Riferimento LINK

7

Partenza JavaScript Array.map per informazioni sulla funzione ufficiale mappa JavaScript. È possibile giocare con il campione lì a vedere come funziona la funzione.Provare a copiare questo nella casella di esempio:

var array = ['dom', 'lun', 'mar', 'mer', 'gio', 'ven', 'sab']; 
var uppers = array.map(function(x) { return x.toUpperCase(); }); 
console.log(uppers); 

E stamperà:

DOM,LUN,MAR,MER,GIO,VEN,SAB 
2

Ed ecco l'one-liner senza creare un loop o una funzione che è ES3 compatibile (potrebbe essere più veloce dal momento che si chiama solo toUpperCase una volta, non hanno testato)

// watch out for strings with comma (eg: ["hi, max"]) then use custom join/split() 
// or just use something safer such as Array.map() 
var uppercaseArray = array.toString().toUpperCase().split(","); 
var uppercaseArray = array.join(0).toUpperCase().split(0); 
var uppercaseArray = (array+"").toUpperCase().split(","); 
6

Questo può essere un eccessivo, ma si può anche fare

var upperCaseArray = array.map(String.prototype.toUpperCase.call.bind(String.prototype.toUpperCase)); 
+0

La risposta di @kron è simile a questa, ma meno dettagliata. –

+2

Questo codice è un po 'confuso perché la parte 'String.prototype.toUpperCase.call' del codice sta semplicemente accedendo al metodo [Function call call] (http://www.javascripture.com/Function#call). Questo metodo è lo stesso per tutte le funzioni in modo da poter attaccare qualsiasi funzione a sinistra di .call senza modificare il comportamento. Suggerirei di cambiarlo in 'Function.prototype.call ...' per essere esplicito che si sta utilizzando la funzione Function, non una funzione speciale della funzione toUpperCase. – nkron

+0

L'esempio più chiaro è: '['a', 'b', 'c']. Map (Function.prototype.call.bind (String.prototype.toUpperCase))' –

1

Capisco che è un po 'tardi per la festa, ma volevo aggiungere questo qui come un altro modo di Delegazione di farlo.

var array = ['dom', 'lun', 'mar', 'mer', 'gio', 'ven', 'sab']; 

"".toUpperCase.apply(array).split(',') 
+0

wow .... cura di spiegare come è lavoro. come/perché si applica la conversione dell'array alla stringa – aWebDeveloper

+0

sicura. Dato che volevo "toUpperCase", dovevo essere in grado di delegarlo o prendere in prestito quella funzionalità. Dato che avevo bisogno di un array per farlo, dovevo in qualche modo passare il "contesto" IN al "toUpperCase". applica (dato che stiamo usando un array), consente questo. perché non ho passato un secondo arg, il primo argomento "array", è il contesto. Quindi, in pratica, si è diffuso per me ... poi l'ho diviso per trasformarlo in un array. –

0

Simile a un precedente per la risposta del ciclo, questo usa alcune delle caratteristiche più basilari della javascript:

function looptoUpper(arr){ 
    var newArr = []; 
    for (var i = 0; i < arr.length; i++){ 
     newArr.push(arr[i].toUpperCase()); 
    } 
    return newArr; 
} 
looptoUpper(['dom', 'lun', 'mar', 'mer', 'gio', 'ven', 'sab']); 
Problemi correlati