Bölünmüş dize dizisinin son öğesini alma


184

Birden çok ayırıcı ile bölünmüş bir dizinin son öğesini almak gerekir. Ayırıcılar virgül ve boşluktur. Ayırıcı yoksa, orijinal dizeyi döndürmelidir.

Eğer dize "bugün nasılsın?" "bugün mü?"

Giriş "merhaba" olsaydı, çıkış "merhaba" olmalıdır.

Bunu JavaScript'te nasıl yapabilirim?

Yanıtlar:


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

Bu noktada, piecesbir dizidir ve dizinin pieces.lengthboyutunu içerir, böylece dizinin son öğesini almak için kontrol edin pieces[pieces.length-1]. Virgül veya boşluk yoksa, dizeyi verildiği gibi çıkarır.

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

55
Dizinizin pieces.pop()son öğesini almak için de kullanabilirsiniz .
Trent

4
değişkeni saklamak zorunda kalmadan str.split () öğesine başvurmak için bunu kullanmanın bir yolu var mı?
Tanner

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

790

Her şey için bir astar var. :)

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

6
Sorun, pop () öğesinin diziden kaldırılması ve böylece değiştirilmesidir.
slashwhatever

50
@Jangla: Bu bir sorun değil, dizi splitçağrı tarafından oluşturulduğundan , yine de tutulmuyor . Orijinal dize, öğenin diziden kaldırılmasıyla değiştirilmez.
Guffa

1
parlak, hepsi bir arada, dizi kurmak için aracı var gerek yok ... güzel
virtualeyes

@Guffa Split'in son iki elemanını nasıl alabilirim?
Vitor Guerreiro

2
@MarioLevrero: Bu, nicelik belirteciyle aynı anlama gelen {1,}, yani [, ]+kümedeki bir veya daha fazla karakterle (virgül ve boşluk) eşleşen bir nicelik belirtecidir . Dizeden tüm kelimeleri istediğinizde yararlıdır, ancak yalnızca son sözcüğü istediğinizde herhangi bir işlevsel fark yaratmaz, dizide daha az dizgi olacağı için ek yükü azaltır.
Guffa

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

10
Ben pop () argüman alıyor sanmıyorum.
Grace Shao


5
Ancak, genel olarak konuşursak .split(',').pop(), virgülle ayrılmış dizgideki son öğe için çalışır. Sadece Guffa'nın müthiş cevabı tarafından yanlış yönlendirildiğimi söylüyorum, sadece göz ardı ettim çünkü bir regex'e ihtiyaç duymadım ve hile olduğunu düşündüm! : P
cregox

25

Dizinizi tersine çevirmeyi ve ilk öğeyi almayı da düşünebilirsiniz. Bu şekilde uzunluğu bilmek zorunda kalmazsınız, ancak büyük dizilerde ters işlemin daha uzun sürebileceği gerçek bir fayda ve dezavantaj getirmez:

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

Yine de kolaydır, ancak söz konusu orijinal diziyi de değiştirir. Bu bir sorun olabilir veya olmayabilir.

Referans: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reverse

Muhtemelen bunu kullanmak isteyebilirsiniz:

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

1
.pop()Yöntem şimdiye kadar gördüğüm en iyi cevaptır. Bu yüzden yaratıldı!
Nicholas Porter

Ters () aleyhine şiddetle tavsiye ediyorum çünkü tersine çevirme büyük dizilerde pahalı olacak. Mutasyon umurunda değil, sadece pop () kullanın, aksi takdirde dilim (-1) [0].
wortwart

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

En iyisi ve benim favorim.


Ah elbette. Bu harika bir cevap çünkü o orijinal mutasyon değil +1
jhamPac

3

Ve eğer bir dizi oluşturmak istemiyorsanız ...

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

İngilizce dökümü:

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

Replace sadece tüm dizgiyi son ayırıcıdan sonraki şeylerle değiştir diyor.

Böylece bunun genel olarak nasıl uygulanabileceğini görebilirsiniz. Orijinal dizenin değiştirilmediğini unutmayın.


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

Dizi dizinine doğrudan erişebilirsiniz:

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


3
Merhaba tnong, SO'ya hoş geldiniz! Bu cevabın, soruda istendiği gibi alan ayırıcıyı dikkate almadığını düşünüyorum.
John-Philip

1
Bu cevap rastgele dize dizi uzunluğunu desteklemiyor
Nima Soroush
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.