विभाजन स्ट्रिंग सरणी का अंतिम तत्व प्राप्त करना


183

मुझे कई विभाजकों के साथ विभाजन सरणी का अंतिम तत्व प्राप्त करने की आवश्यकता है। विभाजक अल्पविराम और स्थान हैं। यदि कोई विभाजक नहीं हैं, तो इसे मूल स्ट्रिंग वापस करना चाहिए।

अगर स्ट्रिंग "आप कैसे हैं, आज कर रहे हैं?" यह "आज" लौटना चाहिए

यदि इनपुट "हैलो" था, तो आउटपुट "हैलो" होना चाहिए।

मैं जावास्क्रिप्ट में यह कैसे कर सकता हूं?

जवाबों:


121
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()
झंडेश्वर

788

हर चीज के लिए वन-लाइनर है। :)

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

6
यहाँ मुद्दा यह है कि पॉप () सरणी से उस तत्व को भी हटा देता है, जिससे यह बदल जाता है।
स्लैशवाटर

50
@ जांगला: यह कोई समस्या नहीं है, क्योंकि splitकॉल द्वारा बनाई गई सरणी , वैसे भी नहीं रखी गई है। सरणी से आइटम को पॉप करके मूल स्ट्रिंग को नहीं बदला गया है।
गुफ्फा

1
शानदार, सभी एक बार में, मध्यस्थ को सरणी सेट करने के लिए मध्यस्थ संस्करण की आवश्यकता नहीं ... अच्छा
virtualeyes

@Guffa क्या आप जानते हैं कि मैं विभाजन के अंतिम दो तत्वों को कैसे प्राप्त कर सकता हूं?
विटोर गुरेरियो

2
@MarioLevrero: यह एक क्वांटिफायर है जिसका अर्थ है कि क्वांटिफायर के समान है {1,}, यानी [, ]+सेट (अल्पविराम और स्थान) में एक या अधिक वर्णों से मेल खाता है। यह उपयोगी है जब आप स्ट्रिंग से सभी शब्दों को चाहते हैं, लेकिन जब आप केवल अंतिम शब्द चाहते हैं तो यह कोई कार्यात्मक अंतर नहीं करता है, यह केवल ओवरहेड को कम करता है क्योंकि सरणी में कम तार होंगे।
गुफ़ा

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

10
मुझे नहीं लगता कि पॉप () तर्क लेती है।
ग्रेस शाओ


5
लेकिन, .split(',').pop()कॉमा सेपरेटेड स्ट्रिंग पर अंतिम तत्व के लिए सामान्य रूप से काम करता है। गुफ़्फ़ के ज़बरदस्त जवाब से गुज़रे ज़माने की गुस्ताख़ी के बारे में मैंने कहा, मुझे इसकी अवहेलना इसलिए नहीं लगी क्योंकि रेक्स की ज़रूरत नहीं थी और सोचा था कि तरकीब भी है! : पी
क्रैगॉक्स

24

आप अपनी सारणी को उलटने और पहले तत्व को लेने पर भी विचार कर सकते हैं। इस तरह से आपको लंबाई के बारे में जानने की ज़रूरत नहीं है, लेकिन यह कोई वास्तविक लाभ नहीं देता है और नुकसान यह है कि रिवर्स ऑपरेशन में अधिक समय लग सकता है:

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

हालांकि यह आसान है, लेकिन प्रश्न में मूल सरणी को भी संशोधित करता है। यह एक समस्या हो सकती है या नहीं।

संदर्भ: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reverse

शायद आप इस का उपयोग करना चाहते हैं, हालांकि:

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

1
.pop()विधि सबसे अच्छा जवाब मैं अब तक देखा है है। इसलिए इसे बनाया गया था!
निकोलस पोर्टर

मैं उल्टा () के खिलाफ दृढ़ता से सलाह दूंगा क्योंकि बड़े सरणियों पर उलटना महंगा होगा। यदि आप उत्परिवर्तन के बारे में परवाह नहीं करते हैं, तो बस पॉप () का उपयोग करें, अन्यथा टुकड़ा (-1) [0]।
wortwart

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

अब तक का सबसे अच्छा और मेरा पसंदीदा।


आह। यह एक महान जवाब है क्योंकि यह
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, एसओ में आपका स्वागत है! मुझे लगता है कि यह उत्तर प्रश्न में अनुरोध के अनुसार अंतरिक्ष विभाजक को ध्यान में नहीं रखता है।
जॉन-फिलिप

1
यह उत्तर मनमाने ढंग से स्ट्रिंग ऐरे लम्बाई का समर्थन नहीं करता है
निमा सोरह
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.