Masu elementu kopēšana citā masīvā

Man ir JavaScript masīvs dataArray, kuru es gribu ievietot jaunā masīvā newArray. Tikai es nevēlos, lai newArray[0] būtu dataArray. Es gribu ievietot visus elementus jaunajā masīvā:

var newArray = [];

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

vai vēl labāk:

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

Tātad tagad jaunais masīvs satur visas atsevišķo datu masīvu vērtības. Vai ir pieejams kāds saīsinājums, piemēram, pushValues, lai man nebūtu jāpārlasa katrs atsevišķs dataArray, pievienojot elementus pa vienam?

Risinājums

Izmantojiet funkciju concat, piemēram, šādi:

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

newArray vērtība būs [1, 2, 3, 4] (arrayA un arrayB paliek nemainīgi; concat izveido un atdod jaunu masīvu kā rezultātu).

Komentāri (10)

Ja jūsu masīvi nav lieli (sk. tālāk), varat izmantot push() metodi tam masīvam, kuram vēlaties pievienot vērtības. push() var pieņemt vairākus parametrus, tāpēc jūs varat izmantot tās apply() metodi, lai nodotu pievienojamo vērtību masīvu kā funkcijas parametru sarakstu. Tā ir priekšrocība, ka, salīdzinot ar concat() izmantošanu, elementi tiek pievienoti masīvam uz vietas, nevis tiek izveidots jauns masīvs.

Tomēr šķiet, ka lieliem masīviem (ar 100 000 vai vairāk locekļu) šis triks var neizdoties. Šādiem masīviem labāka pieeja ir izmantot cilpu. Sīkāku informāciju sk. https://stackoverflow.com/a/17368101/96100.

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

Iespējams, jūs vēlēsieties to vispārināt funkcijā:

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

... vai pievienot to Array's prototipam:

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

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

... vai atdarināt oriģinālo push() metodi, atļaujot vairākus parametrus, izmantojot to, ka concat(), tāpat kā push(), atļauj vairākus parametrus:

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

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

Lūk, pēdējā piemēra uz cilpu balstīta versija, kas piemērota lieliem masīviem un visām galvenajām pārlūkprogrammām, ieskaitot IE

Komentāri (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)

Vai tas atrisina jūsu problēmu ?

Komentāri (0)