Kopírovanie položiek poľa do iného poľa

Mám pole JavaScript dataArray, ktoré chcem presunúť do nového poľa newArray. Lenže nechcem, aby newArray[0] bolo dataArray. Chcem, aby sa do nového poľa vložili všetky položky:

var newArray = [];

newArray.pushValues(dataArray1);
newArray.pushValues(dataArray2);
// ...

alebo ešte lepšie:

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
);

Takže teraz nové pole obsahuje všetky hodnoty jednotlivých dátových polí. Existuje nejaká skratka ako pushValues, aby som nemusel iterovať cez každé jednotlivé dataArray a pridávať položky jednu po druhej?

Riešenie

Použite funkciu concat takto:

var arrayA = [1, 2];
var arrayB = [3, 4];
var newArray = arrayA.concat(arrayB);

Hodnota newArray bude [1, 2, 3, 4] (arrayA a arrayB zostanú nezmenené; concat vytvorí a vráti nové pole pre výsledok).

Komentáre (10)

Ak vaše polia nie sú veľké (pozri upozornenie nižšie), môžete použiť metódu push() poľa, do ktorého chcete pridať hodnoty. Metóda push() môže prijímať viacero parametrov, takže môžete použiť jej metódu apply() na odovzdanie poľa hodnôt, ktoré sa majú pridať, ako zoznam parametrov funkcie. Oproti použitiu funkcie concat() to má tú výhodu, že sa prvky do poľa pridávajú na mieste a nevytvára sa nové pole.

Zdá sa však, že pri veľkých poliach (rádovo 100 000 členov alebo viac) môže tento trik zlyhať. Pre takéto polia je lepším prístupom použitie cyklu. Podrobnosti nájdete na stránke https://stackoverflow.com/a/17368101/96100.

var newArray = [];
newArray.push.apply(newArray, dataArray1);
newArray.push.apply(newArray, dataArray2);

Možno to budete chcieť zovšeobecniť do funkcie:

function pushArray(arr, arr2) {
    arr.push.apply(arr, arr2);
}

... alebo ju pridajte do prototypu Array's:

Array.prototype.pushArray = function(arr) {
    this.push.apply(this, arr);
};

var newArray = [];
newArray.pushArray(dataArray1);
newArray.pushArray(dataArray2);

... alebo napodobniť pôvodnú metódu push() umožnením viacerých parametrov pomocou toho, že concat(), rovnako ako push(), umožňuje viacero parametrov:

Array.prototype.pushArray = function() {
    this.push.apply(this, this.concat.apply([], arguments));
};

var newArray = [];
newArray.pushArray(dataArray1, dataArray2);

Tu'je verzia posledného príkladu založená na slučke, vhodná pre veľké polia a všetky hlavné prehliadače vrátane IE

Komentáre (8)
var a=new Array('a','b','c');
var b=new Array('d','e','f');
var d=new Array('x','y','z');
var c=a.concat(b,d)

Vyriešilo to váš problém ?

Komentáre (0)