javascript - Menyalin (Dalam) sebuah array menggunakan jQuery


Duplikat yang Mungkin:
Apa cara yang paling efisien untuk menggandakan objek JavaScript?

Saya perlu menyalin sebuah array objek (terurut, bukan asosiatif). Saya menggunakan jQuery. Awalnya saya mencoba

jquery.extend({}, myArray)

tetapi, secara alami, ini mengembalikan saya sebuah objek, sementara saya membutuhkan sebuah array (saya benar-benar menyukai jquery.extend, omong-omong).

Jadi, apa cara terbaik untuk menyalin sebuah array?

Jawaban #1

Karena Array.slice() tidak melakukan penyalinan mendalam, ini tidak cocok untuk array multidimensi:

var a =[[1], [2], [3]];
var b = a.slice();

b.shift().shift();
// a is now [[], [2], [3]]

Perlu dicatat bahwa meskipun saya telah menggunakan shift().shift() di atas, intinya hanyalah bahwa b[0][0] berisi penunjuk ke a[0][0] daripada sebuah nilai.

Demikian pula delete(b[0][0]) juga menyebabkan a[0][0] terhapus dan b[0][0]=99 juga mengubah nilai a[0][0] menjadi 99.

Metode extend jQuery memang melakukan salinan mendalam ketika nilai true diberikan sebagai argumen awal:

var a =[[1], [2], [3]];
var b = $.extend(true, [], a);

b.shift().shift();
// a is still [[1], [2], [3]]

Jawaban #2

$.extend(true, [], [['a', ['c']], 'b'])

Itu seharusnya cukup untukmu.

Jawaban #3

Saya menyadari Anda sedang mencari salinan "mendalam" dari sebuah array, tetapi jika Anda hanya memiliki array satu tingkat, Anda dapat menggunakan ini:

Menyalin Array JS asli itu mudah. Gunakan metode Array.slice() yang membuat salinan dari sebagian/seluruh array.

var foo = ['a','b','c','d','e'];
var bar = foo.slice();

sekarang foo dan bar adalah array 5 anggota dari 'a','b','c','d','e'

tentu saja bar adalah salinan, bukan referensi... jadi jika kamu melakukan ini selanjutnya...

bar.push('f');
alert('foo:' + foo.join(', '));
alert('bar:' + bar.join(', '));

sekarang Anda akan mendapatkan:

foo:a, b, c, d, e
bar:a, b, c, d, e, f

Jawaban #4

Segala sesuatu di JavaScript dilewatkan dengan referensi, jadi jika Anda menginginkan salinan mendalam yang sebenarnya dari objek-objek di dalam array, metode terbaik yang bisa saya pikirkan adalah dengan melakukan serialisasi seluruh array ke JSON dan kemudian mendeserialisasikannya kembali.

Artikel terkait