--- title: Array slug: Web/JavaScript/Reference/Global_Objects/Array tags: - Array - JavaScript - NeedsTranslation - TopicStub translation_of: Web/JavaScript/Reference/Global_Objects/Array ---
L'oggetto Array
di JavaScript è un oggetto globale che è utilizzato nella costruzione di array; che sono oggetti di alto-livello del tipo lista.
Creare un Array
var fruits = ["Apple", "Banana"]; console.log(fruits.length); // 2
Accedere (index into) ad un Array item
var first = fruits[0]; // Apple var last = fruits[fruits.length - 1]; // Banana
Loop in un Array
fruits.forEach(function (item, index, array) { console.log(item, index); }); // Apple 0 // Banana 1
Aggiungere alla fine di un Array
var newLength = fruits.push("Orange"); // ["Apple", "Banana", "Orange"]
Rimuovere dalla fine di un Array
var last = fruits.pop(); // remove Orange (from the end) // ["Apple", "Banana"];
Rimuovere dall'inizio di un Array
var first = fruits.shift(); // remove Apple from the front // ["Banana"];
Aggiungere al'inizio di un Array
var newLength = fruits.unshift("Strawberry") // add to the front // ["Strawberry", "Banana"];
Trovare l'indice di un elemento nell'Array
fruits.push("Mango"); // ["Strawberry", "Banana", "Mango"] var pos = fruits.indexOf("Banana"); // 1
Rimuovere un elemento tramite la Posizione dell'Indice
var removedItem = fruits.splice(pos, 1); // this is how to remove an item // ["Strawberry", "Mango"]
Copiare un Array
var shallowCopy = fruits.slice(); // this is how to make a copy // ["Strawberry", "Mango"]
[element0, element1, ..., elementN]
new Array(element0, element1[, ...[, elementN]])
new Array(arrayLength)
elementN
Array
e l'argomento è un numero. (Vedere sotto.) Notare che questo caso speciale si applica solo agli array JavaScript creati con il costruttore Array
, non array literals creati con la sintassi a parentesi.arrayLength
Array
è un integer tra 0 e 232-1 (inclusivo), questo restituisce un nuovo array JavaScript con la lunghezza settata su quel numero. Se l'argomento è un qualsiasi altro numero, un eccezione {{jsxref("Global_Objects/RangeError", "RangeError")}} è lanciata.Gli Array sono come oggetti di tipo lista il cui prototipo ha metodi per performare operazioni trasversali e di mutazione. Nè la lunghezza di un array JavaScript o i tipi dei suoi elementi sono fissati. Poichè la grandezza della lunghezza di un array cresce o diminuisce in qualsiasi momento, gli array JavaScript non danno garanzia di essere compatti; questo dipende da come il programmatore sceglie di usarli. In generale, queste sono caratteristiche convenienti; ma se tali caratteristiche non fossero desiderabili per un utilizzo particolare, si potrebbe considerare di utilizzare i typed arrays.
Alcuni pensano che non si dovrebbe un utilizzare un array come un associative array. In ogni caso, si può utilizzare un semplice {{jsxref("Global_Objects/Object", "objects")}} invece, con i suoi avvertimenti. Vedere il post Lightweight JavaScript dictionaries with arbitrary keys come esempio.
Gli array JavaScript sono indicizzati a zero: il primo elemento di un array è all'indice 0
, e l'ultimo elemento è all'indice uguale al valore della proprietà dell'array {{jsxref("Array.length", "length")}} meno 1. Usare un numero di indice invalido restituisce undefined
.
var arr = ['this is the first element', 'this is the second element']; console.log(arr[0]); // logs 'this is the first element' console.log(arr[1]); // logs 'this is the second element' console.log(arr[arr.length - 1]); // logs 'this is the second element'
Gli elementi dell'Array sono proprietà dell'oggetto allo stesso modo che toString
è una proprietà, ma provare ad accedere ad un elemento di un array come segue, lancia un errore di sintassi, poichè la proprietà del nome non è valida:
console.log(arr.0); // a syntax error
Non c'è niente di speciale riguardo gli array JavaScript e la proprietà che causa questo. Le proprietà JavaScript che iniziano con un numero non possono essere referenziate con la notazione punto: e vi si deve accedere usando la notazione parentesi quadre. Per esempio, se si avesse un oggetto con una proprietà chiamata '3d'
, la si potrebbe referenziare solamente utilizzando la notazione parentesi quadre. E.g.:
var years = [1950, 1960, 1970, 1980, 1990, 2000, 2010]; console.log(years.0); // a syntax error console.log(years[0]); // works properly
renderer.3d.setTexture(model, 'character.png'); // a syntax error renderer['3d'].setTexture(model, 'character.png'); // works properly
Notare che nell'esempio 3d
, '3d'
doveva essere messo tra virgolette. E' possibile mettere tra virgolette anche gli indici dell'array JavaScript (e.g., years['2']
invece di years[2]
), anche se non necessario. Il 2 in years[2]
è costretto in una stringa dal motore di JavaScript attraverso una implicita conversione toString
. E' per questa ragione che '2'
e '02'
riferirebbero a due differenti slot nell'oggetto years
ed il seguente esempio potrebbe essere true
:
console.log(years['2'] != years['02']);
Ugualmente, alle proprietà di oggetti che sono parole riservate(!) vi si può accedere come string literals in notazione parentesi quadrate (ma anche in notazione punto a partire dalla versione 40.0a2 di firefox):
var promise = {
'var' : 'text',
'array': [1, 2, 3, 4]
};
console.log(promise['var']);
length
e proprietà numericheUna proprietà di un array JavaScript {{jsxref("Array.length", "length")}} e proprietà numeriche sono connesse. Molti dei metodi integrati di array(e.g., {{jsxref("Array.join", "join")}}, {{jsxref("Array.slice", "slice")}}, {{jsxref("Array.indexOf", "indexOf")}}, etc.) tengono in conto del valore della proprietà dell'array {{jsxref("Array.length", "length")}} quando sono chiamati. Altri metodi(e.g., {{jsxref("Array.push", "push")}}, {{jsxref("Array.splice", "splice")}}, etc.) risultano nell'aggiornamento della proprietà{{jsxref("Array.length", "length")}} dell'array.
var fruits = []; fruits.push('banana', 'apple', 'peach'); console.log(fruits.length); // 3
Quando si setta una proprietà su un array JavaScript, quando la proprietà è un valido indice di array e quell'iindice è al di fuori dei limiti dell'array, il motore aggiornerà la proprietà {{jsxref("Array.length", "length")}} in accordo:
fruits[5] = 'mango'; console.log(fruits[5]); // 'mango' console.log(Object.keys(fruits)); // ['0', '1', '2', '5'] console.log(fruits.length); // 6
Aumentando{{jsxref("Array.length", "length")}}.
fruits.length = 10; console.log(Object.keys(fruits)); // ['0', '1', '2', '5'] console.log(fruits.length); // 10
Diminuendo la proprietà {{jsxref("Array.length", "length")}}, comunque cancella gli elementi.
fruits.length = 2; console.log(Object.keys(fruits)); // ['0', '1'] console.log(fruits.length); // 2
La spiegazione è ampliata nella pagina{{jsxref("Array.length")}}.
Il risultato di una corrispondenza tra una espressione regolare e una stringa può creare un array JavaScript. Tale array ha proprietà ed elementi che provvedono informazioni riguardo il match. Questo tipo di array è restituito da {{jsxref("RegExp.exec")}}, {{jsxref("String.match")}}, e {{jsxref("String.replace")}}. Per aiutare a spiegare queste proprietà ed elementi, vedere l'esempio seguente e fare riferimento alla tavola sottostante:
// Match one d followed by one or more b's followed by one d // Remember matched b's and the following d // Ignore case var myRe = /d(b+)(d)/i; var myArray = myRe.exec('cdbBdbsbz');
Le proprietà ed elementi restituiti da questo match sono le seguenti:
Property/Element | Description | Example |
input |
Una proprietà read-only che riflette la stinga originale verso la quale l'espressione irregolare era stata abbinata. | cdbBdbsbz |
index |
Una proprietà read-only su indice base-zeroindex dell'abbinamento nella stringa. | 1 |
[0] |
Un elemento read-only che specifica gli ultimi caratteri abbinati. | dbBd |
[1], ...[n] |
Elementi read-only che specificano gli abbinamenti di sottostringa in parentesi, se inclusi nella espressione regolare. Il numero di possibili sottostringhe in parentesi è illimitato. | [1]: bB [2]: d |
Array.length
Array
il cui valore è 1.Array
da un oggetto del tipo array o iterabile.Array
con un variabile numero di argomenti, nonostante il numero o i tipi di argomenti. Array
Tutte le istanze di Array
ereditano da {{jsxref("Array.prototype")}}. L'oggetto prototype del costruttore Array
può essere modificato per influenzare tutte le istanze di Array
.
Metodi generici Array
Array generics are non-standard, deprecated and will get removed near future. Note that you can not rely on them cross-browser. However, there is a shim available on GitHub.
A volte si vorrebbe applicare metodi di array alle stringhe o altri oggetti del tipo array (come {{jsxref("Functions/arguments", "arguments", "", 1)}}). Facendo ciò, si tratta una stringa come un array di caratteri(o altrimenti trattare un non array come array). Per esempio, per controllare che ogni carattere nella variabile str sia una lettera, si scriverebbe:
function isLetter(character) { return character >= 'a' && character <= 'z'; } if (Array.prototype.every.call(str, isLetter)) { console.log("The string '" + str + "' contains only letters!"); }
Tale notazione è dispersiva e JavaScript 1.6 ha introdotto un generico shorthand:
if (Array.every(str, isLetter)) { console.log("The string '" + str + "' contains only letters!"); }
{{jsxref("Global_Objects/String", "Generics", "#String_generic_methods", 1)}} are also available on {{jsxref("Global_Objects/String", "String")}}.
Queste no fanno parte dello standard ECMAScript (anche se ES2015 {{jsxref("Array.from()")}} può essere utilizzato per raggingere tale scopo). Ciò che segue è un aiuto per permetterene l'utilizzo in tutti i browser:
// Assumes Array extras already present (one may use polyfills for these as well) (function() { 'use strict'; var i, // We could also build the array of methods with the following, but the // getOwnPropertyNames() method is non-shimable: // Object.getOwnPropertyNames(Array).filter(function(methodName) { // return typeof Array[methodName] === 'function' // }); methods = [ 'join', 'reverse', 'sort', 'push', 'pop', 'shift', 'unshift', 'splice', 'concat', 'slice', 'indexOf', 'lastIndexOf', 'forEach', 'map', 'reduce', 'reduceRight', 'filter', 'some', 'every', 'find', 'findIndex', 'entries', 'keys', 'values', 'copyWithin', 'includes' ], methodCount = methods.length, assignArrayGeneric = function(methodName) { if (!Array[methodName]) { var method = Array.prototype[methodName]; if (typeof method === 'function') { Array[methodName] = function() { return method.call.apply(method, arguments); }; } } }; for (i = 0; i < methodCount; i++) { assignArrayGeneric(methods[i]); } }());
Il seguente esempio crea un array, msgArray
, con una lunghezza di 0, poi assegna valori a msgArray[0]
e msgArray[99]
, cambiando la lunghezza dell'array a 100.
var msgArray = []; msgArray[0] = 'Hello'; msgArray[99] = 'world'; if (msgArray.length === 100) { console.log('The length is 100.'); }
Ciò che segue crea una scacchiera come un array bidiensionale di stringhe. La prima mossa è fatta copiando la 'p' in (6,4) in (4,4). La vecchia posizione (6,4) è resa bianca.
var board = [ ['R','N','B','Q','K','B','N','R'], ['P','P','P','P','P','P','P','P'], [' ',' ',' ',' ',' ',' ',' ',' '], [' ',' ',' ',' ',' ',' ',' ',' '], [' ',' ',' ',' ',' ',' ',' ',' '], [' ',' ',' ',' ',' ',' ',' ',' '], ['p','p','p','p','p','p','p','p'], ['r','n','b','q','k','b','n','r'] ]; console.log(board.join('\n') + '\n\n'); // Move King's Pawn forward 2 board[4][4] = board[6][4]; board[6][4] = ' '; console.log(board.join('\n'));
Ecco l'output:
R,N,B,Q,K,B,N,R P,P,P,P,P,P,P,P , , , , , , , , , , , , , , , , , , , , , , , , , , , , p,p,p,p,p,p,p,p r,n,b,q,k,b,n,r R,N,B,Q,K,B,N,R P,P,P,P,P,P,P,P , , , , , , , , , , , , , , , , , ,p, , , , , , , , , , p,p,p,p, ,p,p,p r,n,b,q,k,b,n,r
Specification | Status | Comment |
---|---|---|
{{SpecName('ES1')}} | {{Spec2('ES1')}} | Definizione iniziale. |
{{SpecName('ES5.1', '#sec-15.4', 'Array')}} | {{Spec2('ES5.1')}} | Nuovi metodi aggiunti: {{jsxref("Array.isArray")}}, {{jsxref("Array.prototype.indexOf", "indexOf")}}, {{jsxref("Array.prototype.lastIndexOf", "lastIndexOf")}}, {{jsxref("Array.prototype.every", "every")}}, {{jsxref("Array.prototype.some", "some")}}, {{jsxref("Array.prototype.forEach", "forEach")}}, {{jsxref("Array.prototype.map", "map")}}, {{jsxref("Array.prototype.filter", "filter")}}, {{jsxref("Array.prototype.reduce", "reduce")}}, {{jsxref("Array.prototype.reduceRight", "reduceRight")}} |
{{SpecName('ES2015', '#sec-array-objects', 'Array')}} | {{Spec2('ES2015')}} | Nuovi metodi aggiunti: {{jsxref("Array.from")}}, {{jsxref("Array.of")}}, {{jsxref("Array.prototype.find", "find")}}, {{jsxref("Array.prototype.findIndex", "findIndex")}}, {{jsxref("Array.prototype.fill", "fill")}}, {{jsxref("Array.prototype.copyWithin", "copyWithin")}} |
Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Basic support | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} |
Feature | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Basic support | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} |