Dizi öğelerini başka bir diziye kopyalama

Yeni bir dizi olan newArray içine itmek istediğim bir JavaScript dizisi dataArray var. Ancak newArray[0] dizisinin dataArray olmasını istemiyorum. Tüm öğeleri yeni dizinin içine itmek istiyorum:

var newArray = [];

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

ya da daha iyisi:

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

Böylece yeni dizi, tek tek veri dizilerinin tüm değerlerini içerir. Öğeleri tek tek ekleyerek her bir dataArray üzerinde yinelemek zorunda kalmamam için pushValues gibi bir kısayol var mı?

Çözüm

concat]1 fonksiyonunu aşağıdaki gibi kullanın:

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

newArraydeğeri[1, 2, 3, 4]olacaktır (arrayAvearrayBdeğişmeden kalır;concat` sonuç için yeni bir dizi oluşturur ve döndürür).

Yorumlar (10)

Dizilerinizin çok büyük olmaması koşuluyla (aşağıdaki uyarıya bakın), değer eklemek istediğiniz dizinin push() yöntemini kullanabilirsiniz. push()metodu birden fazla parametre alabilir, böyleceapply()metodunu kullanarak itilecek değerler dizisini fonksiyon parametreleri listesi olarak aktarabilirsiniz. Bu,concat()` metoduna göre yeni bir dizi oluşturmak yerine diziye eleman ekleme avantajına sahiptir.

Ancak, büyük diziler (100.000 veya daha fazla üye) için bu numara başarısız olabilir gibi görünüyor. Bu tür diziler için, bir döngü kullanmak daha iyi bir yaklaşımdır. Ayrıntılar için https://stackoverflow.com/a/17368101/96100 adresine bakın.

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

Bunu bir fonksiyon olarak genelleştirmek isteyebilirsiniz:

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

... veya Array'in prototipine ekleyin:

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

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

... ya da concat() metodunun push() gibi birden fazla parametreye izin verdiği gerçeğini kullanarak orijinal push() metodunu taklit edin:

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

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

İşte son örneğin büyük diziler ve IE

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

Bu sorununuzu çözer mi?

Yorumlar (0)