รับองค์ประกอบสุดท้ายของอาร์เรย์สตริงแยก


183

ฉันต้องได้รับองค์ประกอบสุดท้ายของอาเรย์แยกที่มีตัวคั่นหลายตัว ตัวคั่นคือเครื่องหมายจุลภาคและช่องว่าง หากไม่มีตัวคั่นควรส่งคืนสตริงเดิม

หากสตริงเป็น "วันนี้คุณเป็นอย่างไรบ้าง?" มันควรจะกลับมา "วันนี้?"

หากอินพุตเป็น "hello" เอาต์พุตควรเป็น "hello"

ฉันจะทำสิ่งนี้ใน JavaScript ได้อย่างไร

คำตอบ:


122
var str = "hello,how,are,you,today?";
var pieces = str.split(/[\s,]+/);

ณ จุดนี้piecesเป็นอาร์เรย์และมีขนาดของอาร์เรย์เพื่อที่จะได้รับองค์ประกอบสุดท้ายของอาร์เรย์ที่คุณตรวจสอบpieces.length pieces[pieces.length-1]หากไม่มีเครื่องหมายจุลภาคหรือช่องว่างก็จะส่งออกสตริงตามที่ได้รับ

alert(pieces[pieces.length-1]); // alerts "today?"

55
คุณสามารถใช้pieces.pop()เพื่อรับไอเท็มสุดท้ายของอาเรย์ของคุณ
เทรนต์

4
มีวิธีใช้สิ่งนี้เพื่ออ้างถึง str.split () โดยไม่ต้องเก็บตัวแปรหรือไม่?
แทนเนอร์

1
var last = str.split(/[\s,]+/).pop()
zanderwar

788

มีซับในสำหรับทุกสิ่ง :)

var output = input.split(/[, ]+/).pop();

6
ปัญหาที่นี่คือป๊อป () ยังลบองค์ประกอบนั้นจากอาร์เรย์จึงเปลี่ยนมัน
slashwhething

50
@Jangla: นั่นไม่ใช่ปัญหาเพราะอาร์เรย์ถูกสร้างขึ้นโดยการsplitโทรมันไม่ได้ถูกเก็บไว้ สตริงเดิมจะไม่เปลี่ยนแปลงโดยการ popping รายการจากอาร์เรย์
Guffa

1
เจิดจรัส, ทั้งหมดในครั้งเดียว, ไม่จำเป็นสำหรับคนกลาง var ในการตั้งค่าอาร์เรย์ ... ดี
virtualeyes

@Guffa คุณรู้วิธีฉันจะได้รับสองแยกองค์ประกอบสุดท้าย?
Vitor Guerreiro

2
@MarioLevrero: นั่นคือตัวบอกปริมาณที่มีความหมายเหมือนกับตัวบอกปริมาณ{1,}นั่นคือ[, ]+จับคู่อักขระหนึ่งตัวหรือมากกว่าในชุด (เครื่องหมายจุลภาคและช่องว่าง) มันมีประโยชน์เมื่อคุณต้องการคำทั้งหมดจากสตริง แต่เมื่อคุณต้องการเพียงคำสุดท้ายมันไม่ได้สร้างความแตกต่างการทำงานใด ๆ มันจะลดค่าใช้จ่ายเพียงเพราะจะมีสตริงน้อยลงในอาร์เรย์
Guffa

56
var item = "one,two,three";
var lastItem = item.split(",").pop();
console.log(lastItem); // three

10
ฉันไม่คิดว่าป๊อป () รับข้อโต้แย้ง
Grace Shao


5
แต่การพูดโดยทั่วไปใช้.split(',').pop()งานได้สำหรับองค์ประกอบสุดท้ายในสตริงที่คั่นด้วยเครื่องหมายจุลภาค เพียงแค่บอกว่าเพราะฉันถูกเข้าใจผิดโดยคำตอบที่ยอดเยี่ยมของ Guffa ฉันแค่เพิกเฉยเพราะไม่ต้องการ regex และคิดว่าเคล็ดลับอยู่ที่นั่น! : P
cregox

25

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

array1.split(",").reverse()[0]

แม้ว่าจะเป็นเรื่องง่าย แต่ก็สามารถแก้ไขอาเรย์ดั้งเดิมที่เป็นปัญหาได้ นั่นอาจจะใช่หรือไม่ใช่ปัญหาก็ได้

การอ้างอิง: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reverse

อาจเป็นไปได้ว่าคุณอาจต้องการใช้สิ่งนี้:

array1.split(",").pop()

1
.pop()วิธีเป็นคำตอบที่ดีที่สุดที่ฉันเคยเห็นเพื่อให้ห่างไกล นั่นเป็นเหตุผลที่มันถูกสร้างขึ้น!
Nicholas Porter

ฉันขอแนะนำอย่างยิ่งต่อการย้อนกลับ () เนื่องจากการกลับรายการจะมีราคาแพงในอาร์เรย์ขนาดใหญ่ หากคุณไม่สนใจเรื่องการกลายพันธุ์ให้ใช้ป๊อป () มิฉะนั้นฝาน (-1) [0]
wortwart

13
array.split(' ').slice(-1)[0]

หนึ่งที่ดีที่สุดที่เคยและที่ชื่นชอบ


อ่าแน่นอน นี่เป็นคำตอบที่ดีเพราะมันไม่ได้กลายพันธุ์ +1 ดั้งเดิม
jhamPac

3

และถ้าคุณไม่ต้องการสร้างอาร์เรย์ ...

var str = "how,are you doing, today?";
var res = str.replace(/(.*)([, ])([^, ]*$)/,"$3");

รายละเอียดภาษาอังกฤษคือ:

/(anything)(any separator once)(anything that isn't a separator 0 or more times)/

แทนที่เพียงแค่บอกว่าแทนที่สตริงทั้งหมดด้วยสิ่งหลังจากตัวคั่นล่าสุด

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


0
var title = 'fdfdsg dsgdfh dgdh dsgdh tyu hjuk yjuk uyk hjg fhjg hjj tytutdfsf sdgsdg dsfsdgvf dfgfdhdn dfgilkj,n, jhk jsu wheiu sjldsf dfdsf hfdkdjf dfhdfkd hsfd ,dsfk dfjdf ,yier djsgyi kds';
var shortText = $.trim(title).substring(1000, 150).split(" ").slice(0, -1).join(" ") + "...More >>";

0

คุณสามารถเข้าถึงดัชนีอาร์เรย์ได้โดยตรง:

var csv = 'zero,one,two,three'; csv.split(',')[0]; //result: zero csv.split(',')[3]; //result: three


3
สวัสดี tnong ยินดีต้อนรับ SO! ฉันคิดว่าคำตอบนี้ไม่ได้คำนึงถึงตัวคั่นช่องว่างตามที่ร้องขอในคำถาม
John-Philip

1
คำตอบนี้ไม่รองรับความยาวของอาเรย์สตริงโดยพลการ
Nima Soroush
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.