Mais
Copiar itens de matriz para outra matriz
Eu tenho um array JavaScript dataArray
que eu quero empurrar para um novo array newArray
. Exceto que eu não'não quero que o newArray[0]
newArrayseja
dataArray`. Eu quero empurrar todos os itens para o novo array:
var newArray = [];
newArray.pushValues(dataArray1);
newArray.pushValues(dataArray2);
// ...
ou ainda melhor:
var newArray = new Array (
dataArray1.values(),
dataArray2.values(),
// ... where values() (or something equivalent) would push the individual values into the array, rather than the array itself
);
Então agora a nova matriz contém todos os valores das matrizes de dados individuais. Existe algum estorno como pushValues
disponível para que eu não'não tenha que iterar sobre cada dataArray
individual, adicionando os itens um por um?
846
3
Use a função concat, assim:
O valor de
newArray
será[1, 2, 3, 4]
(arrayA
earrayB
permanecem inalterados;concat
cria e retorna um novo array para o resultado).Desde que suas arrays não sejam enormes (veja a advertência abaixo), você pode utilizar o método
push()
do array ao qual você deseja anexar valores. Opush()
pode pegar múltiplos parâmetros para que você possa utilizar seu métodoapply()
para passar o array de valores a serem empurrados como uma lista de parâmetros de funções. Isto tem a vantagem sobre a utilização doconcat()
de adicionar elementos ao array no lugar ao invés de criar um novo array.No entanto, parece que para grandes conjuntos (da ordem de 100.000 membros ou mais), ** este truque pode falhar***. Para tais arrays, usar um loop é uma abordagem melhor. Veja https://stackoverflow.com/a/17368101/96100 para detalhes.
Talvez queira generalizar isto para uma função:
... ou adicioná-lo ao protótipo do 'Array':
... ou emular o método original
push()
, permitindo múltiplos parâmetros utilizando o fato de queconcat()
, comopush()
, permite múltiplos parâmetros:Aqui está uma versão em loop do último exemplo, adequada para grandes arrays e todos os principais navegadores, incluindo o IE
Isso resolve o seu problema?