--- title: Array slug: Web/JavaScript/Referencia/Objetos_globales/Array tags: - Array - JavaScript - Matriz unidimensional - Referencia - Vector translation_of: Web/JavaScript/Reference/Global_Objects/Array ---
{{JSRef}}
El objeto Array
de JavaScript es un objeto global que es usado en la construcción de arrays, que son objetos tipo lista de alto nivel.
Los arrays son objetos similares a una lista cuyo prototipo proporciona métodos para efectuar operaciones de recorrido y de mutación. Tanto la longitud como el tipo de los elementos de un array son variables. Dado que la longitud de un array puede cambiar en cualquier momento, y los datos se pueden almacenar en ubicaciones no contiguas, no hay garantía de que los arrays de JavaScript sean densos; esto depende de cómo el programador elija usarlos. En general estas características son cómodas, pero si, en su caso particular, no resultan deseables, puede considerar el uso de arrays con tipo.
Crear un Array
let frutas = ["Manzana", "Banana"] console.log(frutas.length) // 2
Acceder a un elemento de Array mediante su índice
let primero = frutas[0] // Manzana let ultimo = frutas[frutas.length - 1] // Banana
Recorrer un Array
frutas.forEach(function(elemento, indice, array) { console.log(elemento, indice); }) // Manzana 0 // Banana 1
Añadir un elemento al final de un Array
let nuevaLongitud = frutas.push('Naranja') // Añade "Naranja" al final // ["Manzana", "Banana", "Naranja"]
Eliminar el último elemento de un Array
let ultimo = frutas.pop() // Elimina "Naranja" del final // ["Manzana", "Banana"]
Añadir un elemento al principio de un Array
let nuevaLongitud = frutas.unshift('Fresa') // Añade "Fresa" al inicio // ["Fresa" ,"Manzana", "Banana"]
Eliminar el primer elemento de un Array
let primero = frutas.shift() // Elimina "Fresa" del inicio // ["Manzana", "Banana"]
Encontrar el índice de un elemento del Array
frutas.push('Fresa') // ["Manzana", "Banana", "Fresa"] let pos = frutas.indexOf('Banana') // (pos) es la posición para abreviar // 1
Eliminar un único elemento mediante su posición
.splice(pos, 1)
empieza en la posición que nos indica el valor de la variable pos
y elimina 1 elemento. En este caso, como pos
vale 1, elimina un elemento comenzando en la posición 1 del array, es decir "Banana".let elementoEliminado = frutas.splice(pos, 1) // ["Manzana", "Fresa"]
Eliminar varios elementos a partir de una posición
.splice()
no solo se puede eliminar elementos del array, si no que también podemos extraerlos guardándolo en un nuevo array. ¡Ojo! que al hacer esto estaríamos modificando el array de origen.let vegetales = ['Repollo', 'Nabo', 'Rábano', 'Zanahoria'] console.log(vegetales) // ["Repollo", "Nabo", "Rábano", "Zanahoria"] let pos = 1, numElementos = 2 let elementosEliminados = vegetales.splice(pos, numElementos) // ["Nabo", "Rábano"] ==> Lo que se ha guardado en "elementosEliminados" console.log(vegetales) // ["Repollo", "Zanahoria"] ==> Lo que actualmente tiene "vegetales"
Copiar un Array
let copiaArray = vegetales.slice(); // ["Repollo", "Zanahoria"]; ==> Copiado en "copiaArray"
Los índices de los arrays de JavaScript comienzan en cero, es decir, el índice del primer elemento de un array es 0
, y el del último elemento es igual al valor de la propiedad length
del array restándole 1.
Si se utiliza un número de índice no válido, se obtendrá undefined
.
let arr = ['este es el primer elemento', 'este es el segundo elemento', 'este es el último elemento'] console.log(arr[0]) // escribe en consola 'este es el primer elemento' console.log(arr[1]) // escribe en consola 'este es el segundo elemento' console.log(arr[arr.length - 1]) // escribe en consola 'este es el último elemento'
Los elementos de un array pueden considerarse propiedades del objeto tanto como toString
(sin embargo, para ser precisos, toString()
es un método). Sin embargo, se obtendrá un error de sintaxis si se intenta acceder a un elemento de un array de la forma siguiente, ya que el nombre de la propiedad no sería válido:
console.log(arr.0) // error de sintaxis
No hay nada especial ni en los arrays de JavaScript ni en sus propiedades que ocasione esto. En JavaScript, las propiedades cuyo nombre comienza con un dígito no pueden referenciarse con la notación punto y debe accederse a ellas mediante la notación corchete.
Por ejemplo, dado un objeto con una propiedad de nombre '3d'
, sólo podría accederse a dicha propiedad con la notación corchete.
let decadas = [1950, 1960, 1970, 1980, 1990, 2000, 2010] console.log(decadas.0) // error de sintaxis console.log(decadas[0]) // funciona correctamente
renderizador.3d.usarTextura(modelo, 'personaje.png') renderizador['3d'].usarTextura(modelo, 'personaje.png')
Obsérvese que, en el último ejemplo, ha sido necesario poner '3d'
entre comillas. Es posible usar también comillas con los índices del los arrays de JavaScript (p. ej., decadas['2']
en vez de decadas[2]
), aunque no es necesario.
El motor de JavaScript transforma en un string el 2 de decadas[2]
a través de una conversión implícita mediante toString
. Por tanto, '2'
y '02'
harían referencia a dos posiciones diferentes en el objeto decadas
, y el siguiente ejemplo podría dar true
como resultado:
console.log(decadas['2'] != decadas['02'])
length
y las propiedades numéricasLa propiedad length
de un array de JavaScript está conectada con algunas otras de sus propiedades numéricas.
Varios de los métodos propios de un array (p. ej., join()
, slice()
, indexOf()
, etc.) tienen en cuenta el valor de la propiedad length
de un array cuando se les llama.
Otros métodos (p. ej., push()
, splice()
, etc.) modifican la propiedad length
de un array.
const frutas = [] frutas.push('banana', 'manzana', 'pera') console.log(frutas.length) // 3
Cuando se le da a una propiedad de un array JavaScript un valor que corresponda a un índice válido para el array pero que se encuentre fuera de sus límites, el motor actualizará el valor de la propiedad length
como corresponda:
frutas[5] = 'fresa' console.log(frutas[5]) // 'fresa' console.log(Object.keys(frutas)) // ['0', '1', '2', '5'] console.log(frutas.length) // 6
Si se aumenta el valor de length
:
frutas.length = 10 console.log(frutas) // ['banana', 'manzana', 'pera', <2 empty items>, 'fresa', <4 empty items>] console.log(Object.keys(frutas)) // ['0', '1', '2', '5'] console.log(frutas.length) // 10 console.log(frutas[8]) // undefined
Si se disminuye el valor de la propiedad length
pueden eliminarse elementos:
frutas.length = 2 console.log(Object.keys(frutas)) // ['0', '1'] console.log(frutas.length) // 2
Hay más información sobre este tema en la página sobre Array.length
.
El resultado de una búsqueda con una RegExp
en un string puede crear un array de JavaScript. Este array tendrá propiedades y elementos que proporcionan información sobre la correspondencia encontrada. Para obtener un array de esta forma puede utilizarse RegExp.exec()
, String.match()
o String.replace()
.
El siguiente ejemplo, y la tabla que le sigue, pueden ayudar a comprender mejor las propiedades y elementos a los que nos referimos:
// Buscar una d seguida de una o más b y, al final, de otra d // Recordar las b y la d final // No distinguir mayúsculas y minúsculas const miRe = /d(b+)(d)/i const miArray = miRe.exec('cdbBdbsbz')
Las propiedades y elementos que se obtienen de esta búsqueda son los siguientes:
Propiedad/Elemento | Descripción | Ejemplo |
---|---|---|
input {{ReadOnlyInline}} |
El string original sobre el que se ha realizado la búsqueda con la expresión regular | "cdbBdbsbz" |
index {{ReadOnlyInline}} |
El índice de la correspondencia en el string, siendo cero el de la primera posición. | 1 |
[0] {{ReadOnlyInline}} |
Los últimos caracteres que cumplen la correspondencia | "dbBd" |
[1], ...[n] {{ReadOnlyInline}} |
Elementos que indican las correspondencias de substrings entre paréntesis (si se han incluido) de la expresión regular. No hay límite al número de substrings entre paréntesis que se puedan utilizar. | [1]: "bB" |
Array()
Array
.get Array[@@species]
Array.from()
Array
a partir de similarAUnArray
, un objeto iterable o parecido a un array.Array.isArray()
true
si valor
es un array, y false
en caso contrario.Array.of()
Array
con un número variable de parámetros, independientemente del número y del tipo de dichos parámetros.Array.prototype.length
Array.prototype[@@unscopables]
with
.Array.prototype.concat()
Array.prototype.copyWithin()
Array.prototype.entries()
Array Iterator
que contiene los pares clave/valor para cada índice del array.Array.prototype.every()
true
si todos los elementos del array cumplen el predicado que recibe como parámetro.Array.prototype.fill()
valor
estático a todos los elementos del array entre las posiciones inicio
y fin
.Array.prototype.filter()
Array.prototype.find()
elemento
del array que cumpla el predicado que se pasa como parámetro, o undefined
si ninguno lo cumple.Array.prototype.findIndex()
-1
si nunguno lo cumple.Array.prototype.forEach()
Array.prototype.includes()
valorBuscado
y devuelve true
o false
según sea el caso.Array.prototype.indexOf()
elementoBuscado
, o -1
si no existe.Array.prototype.join()
Array.prototype.keys()
Array Iterator
que contiene las claves de cada índice del array.Array.prototype.lastIndexOf()
elementoBuscado
, o -1
si no existe.Array.prototype.map()
Array.prototype.pop()
Array.prototype.push()
length
.Array.prototype.reduce()
acumulador
y a cada valor del array, que se recorre de izquierda a derecha, para reducirlo a un único valor.Array.prototype.reduceRight()
acumulador
y a cada valor del array, que se recorre de derecha a izquierda, para reducirlo a un único valor.Array.prototype.reverse()
Array.prototype.shift()
Array.prototype.slice()
Array.prototype.some()
true
si al menos un elemento del array cumple con el predicado que se pasa como parámetro.Array.prototype.sort()
Array.prototype.splice()
Array.prototype.toLocaleString()
Object.prototype.toLocaleString()
.Array.prototype.toString()
Object.prototype.toString()
.Array.prototype.unshift()
length
para el array resultante.Array.prototype.values()
Array Iterator
que contiene los valores para cada índice del array.Array.prototype[@@iterator]()
Array Iterator
que contiene los valores para cada índice del array.Ejemplos
El siguiente ejemplo crea un array mensajes
con una longitud de 0, y luego asigna valores a mensajes[0]
y a mensajes[99]
, con lo que la longitud del array pasa a ser 100.
let mensajes = []; mensajes[0] = "Hola"; mensajes[99] = "mundo"; if (mensajes.length === 100) { console.log("La longitud es de 100."); }
El siguiente ejemplo crea una matriz bidimensional que representa un tablero de ajedrez. El primer movimiento se realiza copiando la 'p'
de tablero[6][4]
en tablero[4][4]
. La posición [6][4]
se limpia.
let tablero = [ ['T','C','A','D','R','A','C','T'], ['P','P','P','P','P','P','P','P'], [' ',' ',' ',' ',' ',' ',' ',' '], [' ',' ',' ',' ',' ',' ',' ',' '], [' ',' ',' ',' ',' ',' ',' ',' '], [' ',' ',' ',' ',' ',' ',' ',' '], ['p','p','p','p','p','p','p','p'], ['t','c','a','d','r','a','c','t'] ] console.log(tablero.join('\n') + '\n\n') // Adelantar dos posiciones el peón de rey tablero[4][4] = tablero[6][4] tablero[6][4] = ' ' console.log(tablero.join('\n'))
Este es el resultado:
T,C,A,D,R,A,C,T P,P,P,P,P,P,P,P , , , , , , , , , , , , , , , , , , , , , , , , , , , , p,p,p,p,p,p,p,p t,c,a,d,r,a,c,t P,P,P,P,P,P,P,P , , , , , , , , , , , , , , , , , ,p, , , , , , , , , , p,p,p,p, ,p,p,p t,c,a,d,r,a,c,t
valores = [] for (let x = 0; x < 10; x++){ valores.push([ 2 ** x, 2 * x ** 2 ]) } console.table(valores)
da como resultado:
0 1 0 1 2 2 2 4 8 3 8 18 4 16 32 5 32 50 6 64 72 7 128 98 8 256 128 9 512 162
(La primera columna es el índice).
Especificación | Publicación inicial |
---|---|
{{SpecName('ESDraft', '#sec-array-objects', 'Array')}} | ECMAScript 1 |
{{Compat("javascript.builtins.Array")}}