Um array é uma variável especial que pode conter mais de um valor:
const cars = ["Saab", "Volvo", "BMW"];
Experimente você mesmo →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Arrays</h1>
<p id="demo"></p>
<script>
const cars = ["Saab", "Volvo", "BMW"];
document.getElementById("demo").innerHTML = cars;
</script>
</body>
</html>
Se você tiver uma lista de itens (uma lista de nomes de carros, por exemplo), armazenar o carros em variáveis únicas poderiam ficar assim:
let car1 = "Saab";
let car2 = "Volvo";
let car3 = "BMW";
No entanto, e se você quiser percorrer os carros e encontrar um específico? E se você não tivesse 3 carros, mas 300?
A solução é uma matriz!
Uma matriz pode conter muitos valores sob um único nome, e você pode acesse os valores referindo-se a um número de índice.
Usar um array literal é a maneira mais fácil de criar um array JavaScript.
Sintaxe:
const array_name = [item1, item2, ...];
É uma prática comum declarar arrays com a palavra-chave const.
Saiba mais sobre const com arrays no capítulo: JS Array Const.
const cars = ["Saab", "Volvo", "BMW"];
Experimente você mesmo →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Arrays</h1>
<p id="demo"></p>
<script>
const cars = ["Saab", "Volvo", "BMW"];
document.getElementById("demo").innerHTML = cars;
</script>
</body>
</html>
Espaços e quebras de linha não são importantes. Uma declaração pode abranger várias linhas:
const cars = [
"Saab",
"Volvo",
"BMW"
];
Experimente você mesmo →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Arrays</h1>
<p id="demo"></p>
<script>
const cars = [
"Saab",
"Volvo",
"BMW"
];
document.getElementById("demo").innerHTML = cars;
</script>
</body>
</html>
Você também pode criar um array e depois fornecer os elementos:
const cars = [];
cars[0]= "Saab";
cars[1]= "Volvo";
cars[2]= "BMW";
Experimente você mesmo →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Arrays</h1>
<p id="demo"></p>
<script>
const cars = [];
cars[0]= "Saab";
cars[1]= "Volvo";
cars[2]= "BMW";
document.getElementById("demo").innerHTML = cars;
</script>
</body>
</html>
O exemplo a seguir também cria um Array e atribui valores a ele:
const cars = new Array("Saab", "Volvo", "BMW");
Experimente você mesmo →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Arrays</h1>
<p id="demo"></p>
<script>
const cars = new Array("Saab", "Volvo", "BMW");
document.getElementById("demo").innerHTML = cars;
</script>
</body>
</html>
Os dois exemplos acima fazem exatamente o mesmo.
Não há necessidade de usar new Array()
.
Para simplicidade, legibilidade e velocidade de execução, use o método literal de array.
Você acessa um elemento de array referindo-se ao número do índice:
const cars = ["Saab", "Volvo", "BMW"];
let car = cars[0];
Experimente você mesmo →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Arrays</h1>
<h2>Bracket Indexing</h2>
<p>JavaScript array elements are accessed using numeric indexes (starting from 0).</p>
<p id="demo"></p>
<script>
const cars = ["Saab", "Volvo", "BMW"];
document.getElementById("demo").innerHTML = cars[0];
</script>
</body>
</html>
Observação: os índices de array começam com 0.
[0] é o primeiro elemento. [1] é o segundo elemento.
Esta instrução altera o valor do primeiro elemento em cars
:
cars[0] = "Opel";
const cars = ["Saab", "Volvo", "BMW"];
cars[0] = "Opel";
Experimente você mesmo →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Arrays</h1>
<h2>Bracket Indexing</h2>
<p>JavaScript array elements are accessed using numeric indexes (starting from 0).</p>
<p id="demo"></p>
<script>
const cars = ["Saab", "Volvo", "BMW"];
cars[0] = "Opel";
document.getElementById("demo").innerHTML = cars;
</script>
</body>
</html>
O método JavaScript toString()
converte um array em um sequência de valores de matriz (separados por vírgula).
const fruits = ["Banana", "Orange", "Apple", "Mango"];
document.getElementById("demo").innerHTML = fruits.toString();
Resultado:
Banana,Orange,Apple,MangoExperimente você mesmo →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Arrays</h1>
<h2>The toString() Method</h2>
<p>The toString() method returns an array as a comma separated string:</p>
<p id="demo"></p>
<script>
const fruits = ["Banana", "Orange", "Apple", "Mango"];
document.getElementById("demo").innerHTML = fruits.toString();
</script>
</body>
</html>
Com JavaScript, o array completo pode ser acessado referindo-se ao array nome:
const cars = ["Saab", "Volvo", "BMW"];
document.getElementById("demo").innerHTML = cars;
Experimente você mesmo →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Arrays</h1>
<p id="demo"></p>
<script>
const cars = ["Saab", "Volvo", "BMW"];
document.getElementById("demo").innerHTML = cars;
</script>
</body>
</html>
Matrizes são um tipo especial de objetos. O operador typeof
em JavaScript retorna "objeto" para matrizes.
Porém, arrays JavaScript são melhor descritos como arrays.
Arrays usam números para acessar seus “elementos”. Nisso exemplo, pessoa[0]
retorna João:
const person = ["John", "Doe", 46];
Experimente você mesmo →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Arrays</h2>
<p>Arrays use numbers to access its elements.</p>
<p id="demo"></p>
<script>
const person = ["John", "Doe", 46];
document.getElementById("demo").innerHTML = person[0];
</script>
</body>
</html>
Os objetos usam nomes para acessar seus "membros". Neste exemplo, person.firstName
retorna João:
const person = {firstName:"John", lastName:"Doe", age:46};
Experimente você mesmo →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Objects</h1>
<p>JavaScript uses names to access object properties.</p>
<p id="demo"></p>
<script>
const person = {firstName:"John", lastName:"Doe", age:46};
document.getElementById("demo").innerHTML = person.firstName;
</script>
</body>
</html>
Variáveis JavaScript podem ser objetos. Matrizes são tipos especiais de objetos.
Por causa disso, você pode ter variáveis de diferentes tipos no mesma matriz.
Você pode ter objetos em um Array. Você pode ter funções em um Array. Você pode tem matrizes em um Array:
myArray[0] = Date.now;
myArray[1] = myFunction;
myArray[2] = myCars;
A verdadeira força dos arrays JavaScript são as propriedades integradas do array e métodos:
cars.length // Returns the number of elements
cars.sort() // Sorts the array
Os métodos de array serão abordados nos próximos capítulos.
A propriedade length
de um array retorna o comprimento de um array (o número de array elementos).
const fruits = ["Banana", "Orange", "Apple", "Mango"];
let length = fruits.length;
Experimente você mesmo →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Arrays</h1>
<h2>The length Property</h2>
<p>The length property returns the length of an array:</p>
<p id="demo"></p>
<script>
const fruits = ["Banana", "Orange", "Apple", "Mango"];
let size = fruits.length;
document.getElementById("demo").innerHTML = size;
</script>
</body>
</html>
A propriedade length
é sempre um a mais que o índice mais alto da matriz.
const fruits = ["Banana", "Orange", "Apple", "Mango"];
let fruit = fruits[0];
Experimente você mesmo →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Arrays</h1>
<h2>Bracket Indexing</h2>
<p>JavaScript array elements are accesses using numeric indexes (starting from 0).</p>
<p id="demo"></p>
<script>
const fruits = ["Banana", "Orange", "Apple", "Mango"];
document.getElementById("demo").innerHTML = fruits[0];
</script>
</body>
</html>
const fruits = ["Banana", "Orange", "Apple", "Mango"];
let fruit = fruits[fruits.length - 1];
Experimente você mesmo →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Arrays</h1>
<h2>Bracket Indexing</h2>
<p>JavaScript array elements are accesses using numeric indexes (starting from 0).</p>
<p id="demo"></p>
<script>
const fruits = ["Banana", "Orange", "Apple", "Mango"];
document.getElementById("demo").innerHTML = fruits[fruits.length-1];
</script>
</body>
</html>
Uma maneira de percorrer um array é usar um loop for
:
const fruits = ["Banana", "Orange", "Apple", "Mango"];
let fLen = fruits.length;
let text = "<ul>";
for (let i = 0; i < fLen; i++) {
text += "<li>" + fruits[i] + "</li>";
}
text
+= "</ul>";
Experimente você mesmo →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Arrays</h1>
<h2>Looping an Array</h2>
<p id="demo"></p>
<script>
const fruits = ["Banana", "Orange", "Apple", "Mango"];
let fLen = fruits.length;
let text = "<ul>";
for (let i = 0; i < fLen; i++) {
text += "<li>" + fruits[i] + "</li>";
}
text += "</ul>";
document.getElementById("demo").innerHTML = text;
</script>
</body>
</html>
Você também pode usar a função Array.forEach()
:
const fruits = ["Banana", "Orange", "Apple", "Mango"];
let text = "<ul>";
fruits.forEach(myFunction);
text += "</ul>";
function
myFunction(value) {
text += "<li>" + value + "</li>";
}
Experimente você mesmo →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Arrays</h1>
<h2>The forEach() Method</h2>
<p>Call a function for each array element:</p>
<p id="demo"></p>
<script>
const fruits = ["Banana", "Orange", "Apple", "Mango"];
let text = "<ul>";
fruits.forEach(myFunction);
text += "</ul>";
document.getElementById("demo").innerHTML = text;
function myFunction(value) {
text += "<li>" + value + "</li>";
}
</script>
</body>
</html>
A maneira mais fácil de adicionar um novo elemento a um array é usando o método push()
:
const fruits = ["Banana", "Orange", "Apple"];
fruits.push("Lemon"); // Adds a new element (Lemon) to fruits
Experimente você mesmo →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Arrays</h1>
<h2>The push() Method</h2>
<p>The push method appends a new element to an array.</p>
<button onclick="myFunction()">Try it</button>
<p id="demo"></p>
<script>
const fruits = ["Banana", "Orange", "Apple"];
document.getElementById("demo").innerHTML = fruits;
function myFunction() {
fruits.push("Lemon");
document.getElementById("demo").innerHTML = fruits;
}
</script>
</body>
</html>
Um novo elemento também pode ser adicionado a um array usando a propriedade length
:
const fruits = ["Banana", "Orange", "Apple"];
fruits[fruits.length] = "Lemon"; // Adds "Lemon" to fruits
Experimente você mesmo →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Arrays</h1>
<p>The length property provides an easy way to append new elements to an array without using the push() method.</p>
<button onclick="myFunction()">Try it</button>
<p id="demo"></p>
<script>
const fruits = ["Banana", "Orange", "Apple"];
document.getElementById("demo").innerHTML = fruits;
function myFunction() {
fruits[fruits.length] = "Lemon";
document.getElementById("demo").innerHTML = fruits;
}
</script>
</body>
</html>
AVISO!
<p>Adicionar elementos com índices altos pode criar "buracos" indefinidos em um array:
const fruits = ["Banana", "Orange", "Apple"];
fruits[6] = "Lemon"; // Creates undefined "holes" in fruits
Experimente você mesmo →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Arrays</h1>
<p>Adding elements with high indexes can create undefined "holes" in an array.</p>
<p id="demo"></p>
<script>
const fruits = ["Banana", "Orange", "Apple"];
fruits[6] = "Lemon";
let fLen = fruits.length;
let text = "";
for (i = 0; i < fLen; i++) {
text += fruits[i] + "<br>";
}
document.getElementById("demo").innerHTML = text;
</script>
</body>
</html>
Muitas linguagens de programação oferecem suporte a arrays com índices nomeados.
Matrizes com índices nomeados são chamadas associativas matrizes (ou hashes).
JavaScript não suporta arrays com índices nomeados.
Em JavaScript, arrays sempre usam índices numerados.
const person = [];
person[0] = "John";
person[1] = "Doe";
person[2] = 46;
person.length; // Will return 3
person[0]; // Will return "John"
Experimente você mesmo →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Arrays</h1>
<p id="demo"></p>
<script>
const person = [];
person[0] = "John";
person[1] = "Doe";
person[2] = 46;
document.getElementById("demo").innerHTML =
person[0] + " " + person.length;
</script>
</body>
</html>
AVISO!!
Se você usar índices nomeados, o JavaScript redefinirá o array para um objeto.
Depois disso, alguns métodos e propriedades de array produzirão resultados incorretos. resultados.
const person = [];
person["firstName"] = "John";
person["lastName"] = "Doe";
person["age"] = 46;
person.length; // Will return 0
person[0]; // Will return undefined
Experimente você mesmo →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Arrays</h1>
<p>If you use a named index when accessing an array, JavaScript will redefine the array to a standard object, and some array methods and properties will produce undefined or incorrect results.</p>
<p id="demo"></p>
<script>
const person = [];
person["firstName"] = "John";
person["lastName"] = "Doe";
person["age"] = 46;
document.getElementById("demo").innerHTML =
person[0] + " " + person.length;
</script>
</body>
</html>
Em JavaScript, arrays usam índices numerados.
Em JavaScript, objetos usam índices nomeados.
Arrays são um tipo especial de objeto, com índices numerados.
JavaScript não oferece suporte a matrizes associativas.
Você deve usar objetos quando quiser que os nomes dos elementos sejam strings (texto).
Você deve usar arrays quando quiser que os nomes dos elementos sejam números.
JavaScript possui um construtor de array integrado new Array()
.
Mas você pode usar []
com segurança.
Essas duas instruções diferentes criam um novo array vazio chamado points:
const points = new Array();
const points = [];
Essas duas instruções diferentes criam um novo array contendo 6 números:
const points = new Array(40, 100, 1, 5, 25, 10);
const points = [40, 100, 1, 5, 25, 10];
Experimente você mesmo →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Arrays</h1>
<h2>Creating an Array</h2>
<p>Avoid using new Array(). Use [] instead.</p>
<p id="demo"></p>
<script>
//const points = new Array(40, 100, 1, 5, 25, 10);
const points = [40, 100, 1, 5, 25, 10];
document.getElementById("demo").innerHTML = points[0];
</script>
</body>
</html>
A palavra-chave new
pode produzir alguns resultados inesperados:
// Create an array with three elements:
const points = new Array(40, 100, 1);
Experimente você mesmo →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Arrays</h2>
<p>Create an Array with three elements.</p>
<p id="demo"></p>
<script>
var points = new Array(40, 100, 1);
document.getElementById("demo").innerHTML = points;
</script>
</body>
</html>
// Create an array with two elements:
const points = new Array(40, 100);
Experimente você mesmo →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Arrays</h2>
<p>Create an Array with two elements.</p>
<p id="demo"></p>
<script>
var points = new Array(40, 100);
document.getElementById("demo").innerHTML = points;
</script>
</body>
</html>
// Create an array with one element ???
const points = new Array(40);
Experimente você mesmo →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Arrays</h1>
<p>Avoid using new Array().</p>
<p id="demo"></p>
<script>
var points = new Array(40);
document.getElementById("demo").innerHTML = points;
</script>
</body>
</html>
const points = [40];
não é o mesmo que:
const points = new Array(40);
// Create an array with one element:
const points = [40];
Experimente você mesmo →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Arrays</h1>
<p>Create an Array with one element.</p>
<p id="demo"></p>
<script>
var points = [40];
document.getElementById("demo").innerHTML = points;
</script>
</body>
</html>
// Create an array with 40 undefined elements:
const points = new Array(40);
Experimente você mesmo →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Arrays</h1>
<p>Avoid using new Array().</p>
<p id="demo"></p>
<script>
var points = new Array(40);
document.getElementById("demo").innerHTML = points[0];
</script>
</body>
</html>
Uma pergunta comum é: Como posso saber se uma variável é um array?
O problema é que o operador JavaScript typeof
retorna "objeto
":
const fruits = ["Banana", "Orange", "Apple"];
let type = typeof fruits;
Experimente você mesmo →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Arrays</h1>
<h2>The typeof Operator</h2>
<p>The typeof operator, when used on an array, returns object:</p>
<p id="demo"></p>
<script>
const fruits = ["Banana", "Orange", "Apple", "Mango"];
document.getElementById("demo").innerHTML = typeof fruits;
</script>
</body>
</html>
O operador typeof retorna object porque um array JavaScript é um objeto.
Para resolver este problema ECMAScript 5 (JavaScript 2009) definiu um novo método Array.isArray()
:
Array.isArray(fruits);
Experimente você mesmo →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Arrays</h1>
<h2>The isArray() Method</h2>
<p id="demo"></p>
<script>
const fruits = ["Banana", "Orange", "Apple"];
document.getElementById("demo").innerHTML = Array.isArray(fruits);
</script>
</body>
</html>
O operador instanceof
retorna verdadeiro se um objeto for criado por um determinado construtor:
const fruits = ["Banana", "Orange", "Apple"];
fruits instanceof Array;
Experimente você mesmo →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Arrays</h1>
<h2>The instanceof Operator</h2>
<p>The instanceof operator returns true when used on an array:</p>
<p id="demo"></p>
<script>
var fruits = ["Banana", "Orange", "Apple"];
document.getElementById("demo").innerHTML = fruits instanceof Array;
</script>
</body>
</html>
Para uma referência completa do Array, acesse:
Referência completa de array JavaScript.
A referência contém descrições e exemplos de todos os Array propriedades e métodos.