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.
