Vorrei postare un paio di frammenti di codice che ho in giro qui da un po’. Forse gli intenditori sbadiglieranno, ma ci sono un sacco di persone che sono alla ricerca di queste minuzie. Mi sbarazzo di questi appunti che ho scritto ultimamente e lo pubblico qui per reperirlo con un click.
Vedrete frammenti che aiutano a:
- rilevare se una variabile è un array reale con
isArray
; - convertire in un array vero e proprio con
arguments to Array
; - imitare x = [3 .. 25] genere di cose che offrono altri linguaggi con
[x..y]
; - spaziare la lunghezza una stringa con caratteri predefiniti con
padding
; - creare una funzione unique per gli array con
array.unique()
.
⤽
isArray()
⤽
Ci sono un sacco di modi per verificare la presenza di una variabile di tipo array, ma la più sicura e anche più promossa è
Alcuni esempi che demostrano bene nella console come usarli e come funziona davvero.
Conversione di argomenti per un array
Copia codice
Object.prototype.toString.call(arg) == '[object Array]';
Copia codice
arr = 1 // Questo è un intero, naturalmente.
Object.prototype.toString.call(arr) == '[object Array]';
false
arr = '1' // Solo una stringa.
Object.prototype.toString.call(arr) == '[object Array]';
false
arr = '[1,2,3]' // Anche qui una stringa.
Object.prototype.toString.call(arr) == '[object Array]';
false
arr = {x:1, y:2} // Questo è un oggetto e non un array
Object.prototype.toString.call(arr) == '[object Array]';
false
arr = [1,2,3] // Un array e quindi dovrebbe essere vero.
Object.prototype.toString.call(arr) == '[object Array]';
true
⤽
Uno dei disaggi che gli sviluppatori in JavaScript devono affrontare e che si spera sia risolto con le versioni future (per fortuna) è che l’argomento object si presenta come un array e ha la proprietà length, ma non si può lavorare con essa come se fosse un array, ad esempio qui:
Ma la loro è una soluzione fino a quando il linguaggio che lo gestisce. è
Funzione intervallo
Copia codice
function f() {
console.log(arguments.length);
}
f(1,2,3);
//ritorna 3, arguments.length lavora
function f() {
console.log(arguments.slice());
}
f(1,2);
// ritorna TypeError: arguments.slice non è una funzione
// slice() non è disponibile
Copia codice
function f() {
var realArray = [].slice.call(arguments, 0);
console.log(realArray.slice());
}
f(1,2,3);
// ritorna [1, 2, 3]
// slice non lancia nessun errore
⤽
A volte si necessita di un array piatto con una serie di numeri di una certa fascia, per esempio quella di un insieme di caratteri, con tutti i caratteri maiuscoli. Ma non existe ancora in JavaScript “
Ma se si tratta di qualunque insieme di numeri possiamo ottenerlo con una piccola modifica per trattare l’argomento passato alla funzione.
Quindi per avere qualcosa di simile a “
Riempimento di una stringax = [1 .. 5]
”. Ma avevo bisogno di uno, ed è facile fare uno, come si può vedere:
Copia codice
var chars = [];
for (var i = 65; chars.push(i) && i < 90; i++){};
// creo un array con questi elementi
// [65, 66, 67, ... 88, 89, 90]
// per verificarlo nella console
chars.forEach(function(c){
console.log(String.fromCharCode(c))
});
// si ottiene A B C ... X Y Z
Copia codice
function insieme(input) {
var parti = input.split('..'),
inizio = +parts[0],
finale = +parts[1],
counter = inizio,
output = [];
for (; output.push(counter) && counter < finale; counter++);
return output;
}
insieme('9..55');
// [9, 10, 11, 12, 13, 14, 15]
x = [1 .. 5]
” si può usare “x = insieme('1..5');
”⤽
A volte si desidera un numero con dei zeri a sinistra. Ecco come viene fatto:
Il -3 è la posizione a ritroso della stringa di caratteri. Si aggiungono due zeri all’inizio, perché siamo sicuri che un numero non è mai una stringa vuota. E dopo la concatenazione di stringhe si prendono solo gli ultimi tre caratteri. Semplice e funziona bene senza alcun tipo di if o di una logica complessa.
array.unique()
Copia codice
('00' + 3).slice(-3)
// "003"
('00' + 42).slice(-3)
// "042"
('00' + 103).slice(-3)
// "103"
⤽
PHP ha un sacco di funzioni infernali per gli array, anche se un po selvatiche. Una funzione come
Divertiti, e spero che utile.
unique()
di PHP è una di quelle a volte mancano in Javascript.Ecco una semplice:
Copia codice
function unique(arrayData){
return arrayData.filter(function(val, idx, arr){
return arr.slice(0, idx).indexOf(val)==-1;
});
}
unique([1,2,3,4,1,2,1,3])
// ritorna [1, 2, 3, 4]
unique([1,2,3,4,1,2,1,3,5])
// ritorna [1, 2, 3, 4, 5]
unique(['a', 'a', 'b', 'B'])
// ritorna ["a", "b", "B"]
Ancora nessun commento