Kopiranje elementov polja v drugo polje

Imam polje JavaScript dataArray, ki ga želim potisniti v novo polje newArray. Le da ne želim, da bi bilo newArray[0] dataArray. V novo polje želim vstaviti vse elemente:

var newArray = [];

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

ali še bolje:

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

Tako zdaj novo polje vsebuje vse vrednosti posameznih podatkovnih polj. Ali je na voljo kakšna bližnjica, kot je pushValues, da mi ni treba iterirati čez vsako posamezno dataArray in dodajati elementov enega za drugim?

Rešitev

Uporabite funkcijo concat, kot sledi:

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

Vrednost newArray bo [1, 2, 3, 4] (arrayA in arrayB ostaneta nespremenjena; concat ustvari in vrne novo polje za rezultat).

Komentarji (10)

Če vaša polja niso velika (glejte opozorilo spodaj), lahko uporabite metodo push() polja, ki mu želite dodati vrednosti. Metoda push() lahko sprejme več parametrov, zato lahko uporabite njeno metodo apply(), da posredujete polje vrednosti, ki jih želite dodati, kot seznam parametrov funkcije. Prednost tega je, da v primerjavi z uporabo funkcije concat() dodajamo elemente v polje na mestu, namesto da ustvarjamo novo polje.

Vendar se zdi, da pri velikih poljih (100.000 članov ali več) ta trik lahko odpove**. Za taka polja je boljši pristop uporaba zanke. Za podrobnosti glejte https://stackoverflow.com/a/17368101/96100.

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

Morda boste želeli to posplošiti v funkcijo:

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

... ali pa jo dodajte prototipu Array's:

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

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

... ali pa posnemite izvirno metodo push() tako, da dovolite več parametrov, pri čemer uporabite dejstvo, da concat(), tako kot push(), dovoljuje več parametrov:

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

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

Tukaj je različica zadnjega primera, ki temelji na zanki in je primerna za velika polja in vse glavne brskalnike, vključno z IE

Komentarji (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)

Ali to rešuje vaš problem ?

Komentarji (0)