Bagaimana cara memotong array dengan mudah menggunakan JavaScript?

102

Linq memiliki metode operator yang mudah dipanggil Take()untuk mengembalikan sejumlah elemen dalam apa pun yang diimplementasikan IEnumerable. Apakah ada yang serupa di jQuery untuk bekerja dengan array?

Atau, ditanyakan secara berbeda: bagaimana cara memotong array di Javascript?

Alan Le
sumber
22
Teman-teman, tolong pelajari JavaScript sebelum jQuery. Saya khawatir pertanyaan besok adalah "Apa tipe data lain yang diekspos jQuery selain Array?".
Ionuț G. Stan

Jawaban:

184

Ada metode irisan

array.slice(0, 4);

Akan mengembalikan empat elemen pertama.

Jangan lupa untuk menetapkannya kembali ke variabel Anda jika Anda ingin membuang nilai lainnya.

Catatan: Ini hanya javascript biasa, tidak perlu jquery.

Bob
sumber
15
Bukankah (0,4) mengembalikan 4 pertama, bukan 5 pertama?
Simon Keep
11
Itu sebenarnya tidak benar. Simon Keep benar - argumen kedua metode .slice () adalah posisi array setelah elemen terakhir yang akan dikembalikan. array.slice (0, 4) akan mengembalikan elemen 0, 1, 2, dan 3 - total 4 elemen. Pikirkan argumen kedua sebagai titik potong, di mana .slice (0, x) akan mengembalikan semua elemen dari awal array, hingga tetapi tidak termasuk x.
Bungle
1
endTIDAK disertakan, maka @SimonKeep benar, lihat pengembang
MDN.mozilla.org/en-US/docs/JavaScript/Reference/…
2
Ingatlah untuk menetapkannya kembali ke variabel, itu sangat penting sesederhana kelihatannya
kolexinfos
6
cara buruk, Anda membuat instance array baru, perlu diingat penggunaan memori saat mengkode js bukanlah ide yang buruk.
G. Ghez
125

(2 tahun kemudian ...) Jika Anda benar-benar ingin memotong larik, Anda juga dapat menggunakan lengthatribut:

var stooges = ["Moe", "Larry", "Shemp", "Curly", "Joe"];
stooges.length = 3; // now stooges is ["Moe", "Larry", "Shemp"]

Catatan: jika Anda menetapkan panjang yang lebih panjang dari panjang saat ini, elemen array yang tidak ditentukan diperkenalkan, seperti yang ditunjukkan di bawah ini.

var stooges = ["Moe", "Larry", "Shemp"];
stooges.length = 5;
alert(typeof stooges[4]); // alerts "undefined"

EDIT:

Seperti yang disebutkan @twhitehead di bawah ini, penambahan elemen tidak terdefinisi dapat dihindari dengan melakukan ini:

var stooges = ["Moe", "Larry", "Shemp"];
stooges.length = Math.min(stooges.length, 5); 
alert(stooges.length)// alerts "3"
Jonathan M
sumber
5
Saya terkejut pertama ketika saya melihat ini dalam kode ... Tapi itu cara terbaik (jika Anda truncating dari indeks 0) davidwalsh.name/empty-array
kumarharsh
5
Ini adalah solusi yang sangat sederhana.
Dominique
3
Bagaimana dengan pengumpulan sampah dengan cara ini?
G. Ghez
1
@JonathanM Sebenarnya, nilai null tidak diperkenalkan; variabel baru tidak ditentukan, karena dideklarasikan tetapi tidak diberi nilai apa pun.
Håvard Geithus
3
Luar biasa! Perlu dikatakan bahwa metode ini memodifikasi yang sama Arraydaripada membuat yang baru Array.
Luas
22

Jika Anda bertanya cara memotong (memodifikasi array dengan menghapus elemen dari akhir), gunakan sambungan :

var a1 = [2,4,6,8];
var a2 = a1.splice(-2,2); // a1=[2,4], a2=[6,8]

Jika Anda menanyakan cara mengambil subset larik tanpa memodifikasi aslinya, gunakan slice .

var a1 = [2,4,6,8];
var a2 = a1.slice(-2); // a1=[2,4,6,8], a2=[6,8]

Ingat saja splice memodifikasi, akses slice. Angka negatif sebagai arg pertama menunjukkan indeks dari akhir larik.

Chadwick
sumber
11

Set properti .length ke nilai yang lebih rendah.

Dokumentasi resmi: Array.prototype.length

G. Ghez
sumber
3
untuk mematikan semua elemen dalam larik, paling mudah menyetel panjang ke nol.
hanmari
5

Jika Anda ingin mendapatkan elemen sekaligus menghapusnya dari array, gunakan splice .

Jika Anda ingin menyimpan elemen dalam array, gunakan slice

PatrikAkerstrand
sumber
1

Jika Anda ingin menarik elemen secara selektif dari sebuah array, Anda dapat menggunakan metode jQuery.grep .

(dari dokumen jQuery)

var arr = [ 1, 9, 3, 8, 6, 1, 5, 9, 4, 7, 3, 8, 6, 9, 1 ];

$("div").text(arr.join(", "));

arr = jQuery.grep(arr, function(n, i){
  return (n != 5 && i > 4);
});

$("p").text(arr.join(", "));

arr = jQuery.grep(arr, function (a) { return a != 9; });
$("span").text(arr.join(", "));
ScottKoon
sumber