จะตัดอาร์เรย์ด้วย JavaScript ได้อย่างไร?


103

Linq มีวิธีดำเนินการที่เรียกว่าสะดวกที่จะกลับจำนวนที่กำหนดขององค์ประกอบในสิ่งที่ดำเนินการTake() IEnumerableมีอะไรที่คล้ายกันใน jQuery สำหรับการทำงานกับอาร์เรย์หรือไม่?

หรือถามแตกต่างกัน: ฉันจะตัดอาร์เรย์ใน Javascript ได้อย่างไร


22
พวกคุณโปรดเรียนรู้ JavaScript ก่อน jQuery ฉันเกรงว่าคำถามในวันพรุ่งนี้จะเป็น "jQuery เปิดเผยข้อมูลประเภทใดที่อยู่ข้างๆ Arrays"
Ionuț G. Stan

คำตอบ:


185

มีวิธีการฝาน

array.slice(0, 4);

จะคืนค่าสี่องค์ประกอบแรก

อย่าลืมกำหนดกลับให้กับตัวแปรของคุณหากคุณต้องการทิ้งค่าอื่น ๆ

หมายเหตุ: นี่เป็นเพียงจาวาสคริปต์ปกติไม่จำเป็นต้องใช้ jquery


15
จะไม่ (0,4) ส่งคืน 4 ตัวแรกไม่ใช่ 5 ตัวแรก?
Simon Keep

11
ที่จริงไม่จริง Simon Keep ถูกต้อง - อาร์กิวเมนต์ที่สองของเมธอด. slice () คือตำแหน่งอาร์เรย์หลังองค์ประกอบสุดท้ายที่จะส่งคืน array.slice (0, 4) จะส่งคืนองค์ประกอบ 0, 1, 2 และ 3 - ทั้งหมด 4 องค์ประกอบ ให้คิดว่าอาร์กิวเมนต์ที่สองเป็นจุดตัดโดยที่. slice (0, x) จะส่งคืนองค์ประกอบทั้งหมดตั้งแต่จุดเริ่มต้นของอาร์เรย์จนถึง แต่ไม่รวม x
Bungle

1
endไม่รวมแล้ว @SimonKeep ถูกต้องโปรดดู MDN developer.mozilla.org/en-US/docs/JavaScript/Reference/…
AsTeR

2
อย่าลืมกำหนดกลับให้กับตัวแปรมันสำคัญมากง่ายๆอย่างที่คิด
kolexinfos

6
วิธีที่ไม่ดีคุณสร้างอินสแตนซ์อาร์เรย์ใหม่โปรดทราบว่าการใช้หน่วยความจำเมื่อการเข้ารหัส js ไม่ใช่ความคิดที่ไม่ดี
G.Ghez

126

(2 ปีต่อมา ... ) หากคุณต้องการตัดอาร์เรย์อย่างแท้จริงคุณสามารถใช้lengthแอตทริบิวต์:

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

หมายเหตุ: หากคุณกำหนดความยาวที่ยาวกว่าความยาวปัจจุบันองค์ประกอบอาร์เรย์ที่ไม่ได้กำหนดจะถูกนำมาใช้ดังที่แสดงด้านล่าง

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

แก้ไข:

ดังที่ @twhitehead กล่าวไว้ด้านล่างการเพิ่มองค์ประกอบที่ไม่ได้กำหนดสามารถหลีกเลี่ยงได้โดยทำสิ่งนี้:

var stooges = ["Moe", "Larry", "Shemp"];
stooges.length = Math.min(stooges.length, 5); 
alert(stooges.length)// alerts "3"

5
ฉันแปลกใจครั้งแรกที่เห็นสิ่งนี้ในรหัส ... แต่เป็นวิธีที่ดีที่สุด (ถ้าคุณตัดทอนจากดัชนี 0) davidwalsh.name/empty-array
kumarharsh

5
นี่เป็นวิธีง่ายๆที่น่าทึ่ง
Dominique

3
แล้วการเก็บขยะทำแบบนี้ล่ะ?
G.Ghez

1
@JonathanM ที่จริงไม่ได้นำค่า null มาใช้ ตัวแปรใหม่ไม่ได้กำหนดเนื่องจากมีการประกาศ แต่ไม่ได้กำหนดค่าใด ๆ
Håvard Geithus

3
สุดทึ่ง! มันคุ้มค่าที่จะบอกว่าวิธีการนี้จะปรับเปลี่ยนเดียวกันแทนการสร้างใหม่Array Array
Roomy

22

หากคุณกำลังถามวิธีการตัดทอน (แก้ไขอาร์เรย์โดยการลบองค์ประกอบออกจากส่วนท้าย) ให้ใช้การต่อ :

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

หากคุณกำลังถามถึงวิธีการดึงย่อยของอาร์เรย์โดยไม่ต้องแก้ไขเดิมแล้วใช้ชิ้น

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

เพียงจำไว้ว่า Splice ปรับเปลี่ยนการเข้าถึงชิ้นส่วน ตัวเลขติดลบเป็นอาร์กิวเมนต์แรกบ่งชี้ดัชนีจากท้ายอาร์เรย์


11

ตั้งค่าคุณสมบัติ. length เป็นค่าที่ต่ำกว่า

เอกสารอย่างเป็นทางการ: Array.prototype.length


3
ในการฆ่าองค์ประกอบทั้งหมดในอาร์เรย์การตั้งค่าความยาวเป็นศูนย์นั้นง่ายที่สุด
hanmari

5

หากคุณต้องการที่จะได้รับทั้งสององค์ประกอบเช่นเดียวกับการลบออกจากอาร์เรย์ใช้ประกบกัน

หากคุณต้องการเก็บองค์ประกอบไว้ในอาร์เรย์ให้ใช้สไลซ์


1

หากคุณต้องการดึงองค์ประกอบออกจากอาร์เรย์แบบเลือกได้คุณสามารถใช้เมธอดjQuery.grep

(จากเอกสาร 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(", "));
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.