Saya memiliki var ar = [1, 2, 3, 4, 5]
dan menginginkan beberapa fungsi getSubarray(array, fromIndex, toIndex)
, hasil panggilan tersebut getSubarray(ar, 1, 3)
adalah array baru [2, 3, 4]
.
javascript
arrays
Sergey Metlov
sumber
sumber
Jawaban:
Melihat
Array.slice(begin, end)
sumber
ar
tidak dimodifikasi.console.log(ar);
// -> [1, 2, 3, 4, 5]
Untuk penggunaan sederhana
slice
, gunakan ekstensi saya ke Kelas Array:Kemudian:
Test1 :
<["b", "c", "fd", "ze"]
Test2:
<["c", "fd"]
Test3:
<["c", "fd", "ze"]
Mungkin lebih mudah bagi pengembang yang datang dari bahasa lain (yaitu Groovy).
sumber
Array.prototype.contains
untukArray.prototype.includes
.subarray
metode Anda memberikan hasil yang tidak terduga.bigArr.slice(1,-1)
mengembalikan['b','c','fd']
, yang Anda harapkan (-1 mengetuk satu elemen dari akhir array baru). TetapibigArr.subarray(1,-1)
mengembalikan sama denganbigArr.subarray(1)
, yang mengatakan semuanya dari posisi 1 sampai akhirbigArr
. Anda juga memaksa pengguna untuk selalu memberikan angka negatif sebagaiend
parameter. Anyend >= -1
memberikan hasil yang sama seperti kapanend === undefined
. Di sisi lain,bigArr.slice(1,3)
pengembalian['b','c']
, yang lagi diharapkan.sumber
The Pertanyaan sebenarnya meminta array yang baru , jadi saya percaya solusi yang lebih baik akan menggabungkan jawaban Abdennour Toumi ini dengan fungsi clone:
[ http://stackoverflow.com/questions/728360/most-elegant-way-to-clone-a-javascript-object]
sumber
Array.prototype.slice
sudah mengembalikan salinan.Array.prototype.splice
memodifikasi array asli.slice
sudah mengembalikan salinan yang dangkal, membuatsubarray
implementasi ini tidak perlu. Tetapi perlu juga disebutkan bahwa Anda telah menambal objek bawaan monyet, yang merupakan no-no besar. Lihat komentar pada jawaban Abdennour TOUMI .