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:

  1. rilevare se una variabile è un array reale con isArray;
  2. convertire in un array vero e proprio con arguments to Array;
  3. imitare x = [3 .. 25] genere di cose che offrono altri linguaggi con [x..y];
  4. spaziare la lunghezza una stringa con caratteri predefiniti con padding;
  5. creare una funzione unique per gli array con array.unique().
Tricks
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 è
Copia codice

Object.prototype.toString.call(arg) == '[object Array]';
Alcuni esempi che demostrano bene nella console come usarli e come funziona davvero.
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
Conversione di argomenti per un array
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:
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
Ma la loro è una soluzione fino a quando il linguaggio che lo gestisce. è
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
Funzione intervallo
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 “x = [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
Ma se si tratta di qualunque insieme di numeri possiamo ottenerlo con una piccola modifica per trattare l’argomento passato alla funzione.
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]
Quindi per avere qualcosa di simile a “x = [1 .. 5]” si può usare “x = insieme('1..5');
Riempimento di una stringa
A volte si desidera un numero con dei zeri a sinistra. Ecco come viene fatto:
Copia codice

('00' + 3).slice(-3)
// "003"
('00' + 42).slice(-3)
// "042"
('00' + 103).slice(-3)
// "103"
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()
PHP ha un sacco di funzioni infernali per gli array, anche se un po selvatiche. Una funzione come 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"]
Divertiti, e spero che utile.