Como anexar um objeto (como uma sequência ou número) a uma matriz em JavaScript?
Como anexar um objeto (como uma sequência ou número) a uma matriz em JavaScript?
Respostas:
Use o Array.prototype.push
método para anexar valores a uma matriz:
// initialize array
var arr = [
"Hi",
"Hello",
"Bonjour"
];
// append new value to the array
arr.push("Hola");
console.log(arr);
Você pode usar a push()
função para acrescentar mais de um valor a uma matriz em uma única chamada:
// initialize array
var arr = ["Hi", "Hello", "Bonjour", "Hola"];
// append multiple values to the array
arr.push("Salut", "Hey");
// display all values
for (var i = 0; i < arr.length; i++) {
console.log(arr[i]);
}
Atualizar
Se você deseja adicionar os itens de uma matriz a outra matriz, pode usar firstArray.concat(secondArray)
:
var arr = [
"apple",
"banana",
"cherry"
];
arr = arr.concat([
"dragonfruit",
"elderberry",
"fig"
]);
console.log(arr);
Atualizar
Apenas uma adição a esta resposta, se você quiser acrescentar algum valor ao início de uma matriz que signifique o primeiro índice, poderá usar Array.prototype.unshift
para esse fim.
var arr = [1, 2, 3];
arr.unshift(0);
console.log(arr);
Ele também suporta a adição de vários valores de uma só vez, assim como push
.
for
nada (use .forEach
).
length
propriedade. O intérprete faz um trabalho incrível por si só e não fará nenhuma diferença no Mundo Real, seja você otimizado ou não. Se sua matriz se tornar tão grande que a otimização .length
realmente ajudaria, provavelmente uma matriz não é mais a estrutura de dados correta. O uso forEach
tem suas vantagens, mas é altamente duvidoso que o aumento do desempenho seja um deles, pois a chamada de função para cada iteração gera um custo e não economiza nada.
length
propriedade de uma matriz não é calculada toda vez que você a chama, é uma variável armazenada no array
objeto, que é atualizada somente quando você altera a matriz. Portanto, não há, de fato, nenhum custo de desempenho incluindo arr.length
a for
condição.
forEach
funções de retorno de chamada (algumas delas provavelmente já o fazem) e não haverá diferença no código da máquina gerado, se a função for chamada com frequência suficiente para ser compilada em vez de interpretada por o tempo de execução. O mesmo conselho vale para qualquer idioma que não seja assembler, na verdade.
Se você estiver apenas acrescentando uma única variável, push()
funcionará perfeitamente. Se você precisar anexar outra matriz, use concat()
:
var ar1 = [1, 2, 3];
var ar2 = [4, 5, 6];
var ar3 = ar1.concat(ar2);
alert(ar1);
alert(ar2);
alert(ar3);
O concat não afeta ar1
e, a ar2
menos que seja reatribuído, por exemplo:
var ar1 = [1, 2, 3];
var ar2 = [4, 5, 6];
ar1 = ar1.concat(ar2);
alert(ar1);
Muitas ótimas informações aqui .
How do I append to an array in JavaScript?
, mas concat
na verdade cria uma nova matriz. Essa é uma diferença importante! Em vez disso, eu diria que a resposta abaixo da Omnimike é realmente a melhor: use Push.apply para enviar uma matriz inteira para uma matriz existente sem criar uma nova.
ar1 = ar1.concat(ar2);
anexará aar1
ar1
, anexar ar2
e retornar a nova matriz. Apenas deixe de fora a parte da atribuição ( ar1 = ...
) dessa linha de código e você verá que o original ar1
não mudou de fato. Se você quiser evitar fazer uma cópia, precisará push
. Não acredite em mim, acredite nos documentos : "O método concat () retorna uma nova matriz" Primeira frase nos documentos para concat
.
ar2
acima é de qualquer maneira. O resultado de .push
no cenário será = [ar1, [ar2]]
. .concat resolve esse problema, mas com sacrifício de velocidade e uma nova matriz criada. Para usar .push
corretamente os anexos da matriz, faça primeiro o loop do elemento contido e empurre cada um. ar2.forEach(each => { ar1.push(each); });
Alguns testes de referência rápidos (cada teste = 500k elementos anexados e os resultados são médias de várias execuções) mostraram o seguinte:
Firefox 3.6 (Mac):
arr[arr.length] = b
é mais rápido (300 ms vs. 800 ms)arr.push(b)
é mais rápido (500 ms vs. 900 ms)Safari 5.0 (Mac):
arr[arr.length] = b
é mais rápido (90ms vs. 115ms)arr[arr.length] = b
é mais rápido (160ms vs. 185ms)Google Chrome 6.0 (Mac):
Gosto mais da arr.push()
sintaxe, mas acho que ficaria melhor com a arr[arr.length]
versão, pelo menos em velocidade bruta. Eu adoraria ver os resultados de uma execução do IE.
Meus loops de benchmarking:
function arrpush_small() {
var arr1 = [];
for (a = 0; a < 100; a++)
{
arr1 = [];
for (i = 0; i < 5000; i++)
{
arr1.push('elem' + i);
}
}
}
function arrlen_small() {
var arr2 = [];
for (b = 0; b < 100; b++)
{
arr2 = [];
for (j = 0; j < 5000; j++)
{
arr2[arr2.length] = 'elem' + j;
}
}
}
function arrpush_large() {
var arr1 = [];
for (i = 0; i < 500000; i++)
{
arr1.push('elem' + i);
}
}
function arrlen_large() {
var arr2 = [];
for (j = 0; j < 500000; j++)
{
arr2[arr2.length] = 'elem' + j;
}
}
Eu acho que vale a pena mencionar que o push pode ser chamado com vários argumentos, que serão anexados à matriz em ordem. Por exemplo:
var arr = ['first'];
arr.push('second', 'third');
console.log(arr);
Como resultado disso, você pode usar push.apply para anexar uma matriz a outra matriz da seguinte maneira:
var arr = ['first'];
arr.push('second', 'third');
arr.push.apply(arr, ['forth', 'fifth']);
console.log(arr);
O ES5 anotado tem mais informações sobre exatamente o que o push and apply faz.
Atualização de 2016: com spread , você não precisa apply
mais disso , como:
var arr = ['first'];
arr.push('second', 'third');
arr.push(...['fourth', 'fifth']);
console.log(arr) ;
Array.prototype.push.apply()
.
Você pode usar push
e apply
funcionar para acrescentar duas matrizes.
var array1 = [11, 32, 75];
var array2 = [99, 67, 34];
Array.prototype.push.apply(array1, array2);
console.log(array1);
Ele será anexado array2
a array1
. Agora array1
contém [11, 32, 75, 99, 67, 34]
. Esse código é muito mais simples do que escrever for
loops para copiar todos os itens da matriz.
...
operador em vez de aplicar a const a1 = [] const a2 = [5,6,7] const.push(...a2)
edição: destaque da sintaxe
array1.concat(array2)
nesta situação. A chamada para push
parece desnecessária.
Com o novo operador de spread ES6 , unir duas matrizes usando push
fica ainda mais fácil:
var arr = [1, 2, 3, 4, 5];
var arr2 = [6, 7, 8, 9, 10];
arr.push(...arr2);
console.log(arr);
Isso adiciona o conteúdo de arr2
no final de arr
.
Se arr
é uma matriz e val
é o valor que você deseja adicionar, use:
arr.push(val);
Por exemplo
var arr = ['a', 'b', 'c'];
arr.push('d');
console.log(arr);
Use concat
:
a = [1, 2, 3];
b = [3, 4, 5];
a = a.concat(b);
console.log(a);
Javascript com ECMAScript 5 padrão que é apoiado pela maioria dos navegadores agora, você pode usar apply()
para anexar array1
a array2
.
var array1 = [3, 4, 5];
var array2 = [1, 2];
Array.prototype.push.apply(array2, array1);
console.log(array2); // [1, 2, 3, 4, 5]
Javascript com o padrão ECMAScript 6, suportado pelo Chrome, FF e IE Edge, você pode usar o spread
operador:
"use strict";
let array1 = [3, 4, 5];
let array2 = [1, 2];
array2.push(...array1);
console.log(array2); // [1, 2, 3, 4, 5]
O spread
operador irá substituir array2.push(...array1);
com array2.push(3, 4, 5);
quando o navegador está pensando a lógica.
Ponto de bônus
Se você deseja criar outra variável para armazenar todos os itens de ambas as matrizes, faça o seguinte:
ES5 var combinedArray = array1.concat(array2);
ES6 const combinedArray = [...array1, ...array2]
O operador de propagação ( ...
) deve espalhar todos os itens de uma coleção.
Se você deseja anexar duas matrizes -
var a = ['a', 'b'];
var b = ['c', 'd'];
então você pode usar:
var c = a.concat(b);
E se você deseja adicionar registro g
ao array ( var a=[]
), então você pode usar:
a.push('g');
O push()
método adiciona novos itens ao final de uma matriz e retorna o novo comprimento. Exemplo:
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.push("Kiwi");
// The result of fruits will be:
Banana, Orange, Apple, Mango, Kiwi
A resposta exata para sua pergunta já foi respondida, mas vamos ver outras maneiras de adicionar itens a uma matriz.
O unshift()
método adiciona novos itens ao início de uma matriz e retorna o novo comprimento. Exemplo:
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.unshift("Lemon", "Pineapple");
// The result of fruits will be:
Lemon, Pineapple, Banana, Orange, Apple, Mango
E, finalmente, o concat()
método é usado para unir duas ou mais matrizes. Exemplo:
var fruits = ["Banana", "Orange"];
var moreFruits = ["Apple", "Mango", "Lemon"];
var allFruits = fruits.concat(moreFruits);
// The values of the children array will be:
Banana, Orange, Apple, Mango, Lemon
Existem algumas maneiras de acrescentar uma matriz no JavaScript:
1) O push()
método adiciona um ou mais elementos ao final de uma matriz e retorna o novo comprimento da matriz.
var a = [1, 2, 3];
a.push(4, 5);
console.log(a);
Resultado:
[1, 2, 3, 4, 5]
2) Ounshift()
método adiciona um ou mais elementos ao início de uma matriz e retorna o novo comprimento da matriz:
var a = [1, 2, 3];
a.unshift(4, 5);
console.log(a);
Resultado:
[4, 5, 1, 2, 3]
3) O concat()
método é usado para mesclar duas ou mais matrizes. Este método não altera as matrizes existentes, mas retorna uma nova matriz.
var arr1 = ["a", "b", "c"];
var arr2 = ["d", "e", "f"];
var arr3 = arr1.concat(arr2);
console.log(arr3);
Resultado:
[ "a", "b", "c", "d", "e", "f" ]
4) Você pode usar a .length
propriedade da matriz para adicionar um elemento ao final da matriz:
var ar = ['one', 'two', 'three'];
ar[ar.length] = 'four';
console.log( ar );
Resultado:
["one", "two", "three", "four"]
5) O splice()
método altera o conteúdo de uma matriz removendo elementos existentes e / ou adicionando novos elementos:
var myFish = ["angel", "clown", "mandarin", "surgeon"];
myFish.splice(4, 0, "nemo");
//array.splice(start, deleteCount, item1, item2, ...)
console.log(myFish);
Resultado:
["angel", "clown", "mandarin", "surgeon","nemo"]
6) Você também pode adicionar um novo elemento a uma matriz simplesmente especificando um novo índice e atribuindo um valor:
var ar = ['one', 'two', 'three'];
ar[3] = 'four'; // add new element to ar
console.log(ar);
Resultado:
["one", "two","three","four"]
push
faz: modifica a matriz original pressionando novos elementos nela. Estou lendo isso errado ou deve ser editado?
Agora, você pode tirar proveito da sintaxe do ES6 e apenas fazer:
let array = [1, 2];
console.log([...array, 3]);
mantendo a matriz original imutável.
Se você souber o índice mais alto (como armazenado em uma variável "i"), poderá fazer
myArray[i + 1] = someValue;
No entanto, se você não souber, poderá usar
myArray.push(someValue);
como outras respostas sugeridas, ou você pode usar
myArray[myArray.length] = someValue;
Observe que a matriz é baseada em zero, então .length retorna o índice mais alto mais um.
Observe também que você não precisa adicionar em ordem e pode realmente pular valores, como em
myArray[myArray.length + 1000] = someValue;
Nesse caso, os valores intermediários terão um valor indefinido.
Portanto, é uma boa prática ao fazer um loop através de um JavaScript para verificar se um valor realmente existe naquele momento.
Isso pode ser feito por algo como o seguinte:
if(myArray[i] === "undefined"){ continue; }
se você tem certeza de que não possui zeros na matriz, basta fazer o seguinte:
if(!myArray[i]){ continue; }
Obviamente, certifique-se de que, neste caso, você não use como a condição myArray [i] (como algumas pessoas na Internet sugerem, com base no fim de que, assim que eu for maior, o índice mais alto retornará indefinido, que é avaliado como falso)
"undefined"
. Deve ler void 0
! "undefined"
é uma sequência e "undefined" !== void 0
, portanto, você if(myArray[i]
é falso, a menos que a matriz no índice i
seja configurada para a sequência com o conteúdo equivalente a 'u'+'n'+'d'+'e'+'f'+'i'+'n'+'e'+'d'
. Observe também que você não deve usar undefined
, em vez disso, use void 0
. Como void 0
sempre é o valor indefinido, while undefined
pode ser definido por meio de algo como function x(undefined) { alert(undefined) } x("hello world")
, portanto, você não pode ter certeza se alguém acidentalmente configurou window["undefined"]=1
ou semelhante.
Anexar elemento único
//Append to the end
arrName.push('newName1');
//Prepend to the start
arrName.unshift('newName1');
//Insert at index 1
arrName.splice(1, 0,'newName1');
//1: index number, 0: number of element to remove, newName1: new element
// Replace index 3 (of exists), add new element otherwise.
arrName[3] = 'newName1';
Anexar vários elementos
//Insert from index number 1
arrName.splice(1, 0,'newElemenet1', 'newElemenet2', 'newElemenet3');
//1: index number from where insert starts,
//0: number of element to remove,
//newElemenet1,2,3: new elements
Anexar matriz
//join two or more arrays
arrName.concat(newAry1, newAry2);
//newAry1,newAry2: Two different arrays which are to be combined (concatenated) to an existing array
arrName.push('newElemenet1, newElemenet2, newElemenet3')
?
arrName
era longa 1
.
myarray[myarray.length] = 'new element value added to the end of the array';
myarray.length retorna o número de strings na matriz. JS é zero, portanto a próxima chave do elemento da matriz será o comprimento atual da matriz. EX:
var myarray = [0, 1, 2, 3],
myarrayLength = myarray.length; //myarrayLength is set to 4
Só quero adicionar um trecho para a adição não destrutiva de um elemento.
var newArr = oldArr.concat([newEl]);
Desde Array.prototype.push adiciona um ou mais elementos ao final de uma matriz e retorna o novo tamanho da matriz , às vezes queremos apenas obter a nova matriz atualizada para que possamos fazer algo assim:
const arr = [1, 2, 3];
const val = 4;
arr.concat([val]); // [1, 2, 3, 4]
Ou apenas:
[...arr, val] // [1, 2, 3, 4]
você pode fazer isso usando o novo recurso javascript Es 6:
// initialize array
var arr = [
"Hi",
"Hello",
"Bangladesh"
];
// append new value to the array
arr= [...arr , "Feni"];
// or you can put a variable value
var testValue = "Cool";
arr = [...arr , testValue ];
console.log(arr);
// final output [ 'Hi', 'Hello', 'Bangladesh', 'Feni', 'Cool' ]
se você quiser combinar duas matrizes sem a duplicata, tente o código abaixo
array_merge = function (arr1, arr2) {
return arr1.concat(arr2.filter(function(item){
return arr1.indexOf(item) < 0;
}))
}
uso:
array1 = ['1', '2', '3']
array2 = ['2', '3', '4', '5']
combined_array = array_merge(array1, array2)
Saída: [1,2,3,4,5]
Para anexar um único item a uma matriz, use o push()
método fornecido pelo objeto Array:
const fruits = ['banana', 'pear', 'apple']
fruits.push('mango')
console.log(fruits)
push()
muda a matriz original.
Para criar uma nova matriz, use o concat()
método Array:
const fruits = ['banana', 'pear', 'apple']
const allfruits = fruits.concat('mango')
console.log(allfruits)
Observe que concat()
, na verdade, não adiciona um item à matriz, mas cria uma nova matriz, que você pode atribuir a outra variável ou reatribuir à matriz original (declarando-a como let
, pois não é possível reatribuir a const
):
const fruits = ['banana', 'pear', 'apple']
const allfruits = fruits.concat('mango')
console.log(allfruits)
let fruits = ['banana', 'pear', 'apple']
fruits = fruits.concat('mango')
Para anexar um item múltiplo a uma matriz, você pode usá push()
-lo chamando-o com vários argumentos:
const fruits = ['banana', 'pear', 'apple']
fruits.push('mango', 'melon', 'avocado')
console.log(fruits)
Você também pode usar o concat()
método que você viu antes, passando uma lista de itens separados por vírgula:
const fruits = ['banana', 'pear', 'apple']
const allfruits = fruits.concat('mango', 'melon', 'avocado')
console.log(allfruits)
ou uma matriz:
const fruits = ['banana', 'pear', 'apple']
const allfruits = fruits.concat(['mango', 'melon', 'avocado'])
console.log(allfruits)
Lembre-se de que, conforme descrito anteriormente, esse método não altera a matriz original, mas retorna uma nova matriz.
Originalmente publicado em
Se você deseja acrescentar um único valor a uma matriz, basta usar o método push. Ele adicionará um novo elemento no final da matriz.
Mas se você pretende adicionar vários elementos, armazene os elementos em uma nova matriz e concatene a segunda matriz com a primeira matriz ... da maneira que desejar.
arr=['a','b','c'];
arr.push('d');
//now print the array in console.log and it will contain 'a','b','c','d' as elements.
console.log(array);
Não temos a função de acréscimo para Array em javascript, mas temos push e unshift , imagine que você tenha o array abaixo:
var arr = [1, 2, 3, 4, 5];
e gostamos de acrescentar um valor a essa matriz, podemos fazer, arr.push (6) e ela adicionará 6 ao final da matriz:
arr.push(6); // return [1, 2, 3, 4, 5, 6];
também podemos usar unshift, veja como podemos aplicar isso:
arr.unshift(0); //return [0, 1, 2, 3, 4, 5];
São as principais funções para adicionar ou acrescentar novos valores às matrizes.
Você pode usar o método push.
Array.prototype.append = function(destArray){
destArray = destArray || [];
this.push.call(this,...destArray);
return this;
}
var arr = [1,2,5,67];
var arr1 = [7,4,7,8];
console.log(arr.append(arr1));// [7, 4, 7, 8, 1, 4, 5, 67, 7]
console.log(arr.append("Hola"))//[1, 2, 5, 67, 7, 4, 7, 8, "H", "o", "l", "a"]
push()
adiciona um novo elemento ao final de uma matriz.
pop()
remove um elemento do final de uma matriz.
Para anexar um objeto (como uma sequência ou número) a uma matriz, use -
array.push(toAppend);
Você pode usar o push () se desejar adicionar valores, por exemplo arr.push("Test1", "Test2");
Se você possui um array, pode usar concat (), por exemplo Array1.concat(Array2)
Se você tiver apenas um elemento para adicionar, também pode tentar o comprimento menthod, por exemplo array[aray.length] = 'test';