Bir dizem var 12345.00
ve geri dönmesini istiyorum 12345.0
.
Baktım trim
, ama görünüşe göre sadece beyaz alanı kırpıyor ve slice
bunun nasıl çalışacağını görmüyorum. Herhangi bir öneri?
Math.round('0.5') === 1
;)
Bir dizem var 12345.00
ve geri dönmesini istiyorum 12345.0
.
Baktım trim
, ama görünüşe göre sadece beyaz alanı kırpıyor ve slice
bunun nasıl çalışacağını görmüyorum. Herhangi bir öneri?
Math.round('0.5') === 1
;)
Yanıtlar:
Alt dize işlevini kullanabilirsiniz :
let str = "12345.00";
str = str.substring(0, str.length - 1);
console.log(str);
Bu kabul edilen cevaptır, ancak aşağıdaki konuşmalara göre, dilim sözdizimi çok daha açıktır:
let str = "12345.00";
str = str.slice(0, -1);
console.log(str);
str = str.substring(0, str.length -1);
slice
Ve substring
yöntemleri her çoğu aynıdır; dışında slice()
dize sonuna göre negatif bir dizin kabul, ancak değil, hata substring
atarout-of-bound
substring
% 11 daha hızlıdır slice
. jsperf.com/js-slice-vs-substring-test
Dilim kullanabilirsiniz ! Sadece nasıl kullanılacağını bildiğinizden emin olmalısınız. Pozitif #'ler başlangıca, negatif sayılar sona göredir.
js>"12345.00".slice(0,-1)
12345.0
substring
yöntem dinamik dizelerde de kullanılamadı mı? Dinamik olarak uzunluk elde etmek için str.length kullanarak?
JavaScript dize nesnelerinin alt dize yöntemini kullanabilirsiniz :
s = s.substring(0, s.length - 4)
Dizeden son dört karakteri koşulsuz olarak kaldırır s
.
Ancak, son dört karakteri koşullu olarak kaldırmak istiyorsanız , yalnızca tam olarak oldukları takdirde _bar
:
var re = /_bar$/;
s.replace(re, "");
slice
burada daha iyi. s.slice(0, -4)
En kolay yöntem, slice
dizenin negatif konumlara (dizenin sonundaki ofsete karşılık gelen) izin veren yöntemini kullanmaktır :
const s = "your string";
const withoutLastFourChars = s.slice(0, -4);
Son alt çizgiden sonra (ve dahil) her şeyi kaldırmak için daha genel bir şeye ihtiyacınız varsa, aşağıdakileri yapabilirsiniz ( s
en az bir alt çizgi içereceği garanti edildiği sürece ):
const s = "your_string";
const withoutLastChunk = s.slice(0, s.lastIndexOf("_"));
console.log(withoutLastChunk);
Örneğiniz gibi bir sayı için bunu şu şekilde yapmanızı öneriyorum substring
:
console.log(parseFloat('12345.00').toFixed(1));
Bu aslında sayılır, ancak istenir ama belki değil hayal ediyorum yuvarlak olacağını unutmayın:
console.log(parseFloat('12345.46').toFixed(1));
JavaScript'in dilim işlevini kullanma:
let string = 'foo_bar';
string = string.slice(0, -4); // Slice off last four characters here
console.log(string);
Bu, bir dizenin sonunda herhangi bir uzunlukta '_bar' kaldırmak için kullanılabilir.
Bunu dene:
const myString = "Hello World!";
console.log(myString.slice(0, -1));
Nasıl olur:
let myString = "12345.00";
console.log(myString.substring(0, myString.length - 1));
Normal ifadeyi kullan:
let aStr = "12345.00";
aStr = aStr.replace(/.$/, '');
console.log(aStr);
console.log("a string".match(/(.*).$/)[1]);
console.log("a string".match(/(.*).$/));
console.log("a string".match(/(.*).{2}$/)[1]);
const str = "test!";
console.log(str.slice(0, -1));
İşte diğer cevaplarda gördüğümü sanmıyorum bir alternatif, sadece eğlence için.
var strArr = "hello i'm a string".split("");
strArr.pop();
document.write(strArr.join(""));
Dilim veya alt dize kadar okunaklı veya basit değil, ancak bilmeye değer bazı güzel dizi yöntemleri kullanarak dize ile oynamanıza izin veriyor.
Sadece son karakteri kırpmak yerine, kayan noktaların genel yuvarlamasını yapmak istiyorsanız:
var float1 = 12345.00,
float2 = 12345.4567,
float3 = 12345.982;
var MoreMath = {
/**
* Rounds a value to the specified number of decimals
* @param float value The value to be rounded
* @param int nrDecimals The number of decimals to round value to
* @return float value rounded to nrDecimals decimals
*/
round: function (value, nrDecimals) {
var x = nrDecimals > 0 ? 10 * parseInt(nrDecimals, 10) : 1;
return Math.round(value * x) / x;
}
}
MoreMath.round(float1, 1) => 12345.0
MoreMath.round(float2, 1) => 12345.5
MoreMath.round(float3, 1) => 12346.0
EDIT: Paolo'nun belirttiği gibi, bunun için yerleşik bir işlev var gibi görünüyor. Bu çözüm benimkinden çok daha temiz. ParseFloat ve ardından toFixed kullanın
if(str.substring(str.length - 4) == "_bar")
{
str = str.substring(0, str.length - 4);
}
https://jsfiddle.net/invos/w3zeqv6v/
/programming/34817546/javascript-how-to-delete-last-two-characters-in-a-string
Boşluk istemiyorsanız sadece trim kullanın
"11.01 °C".slice(0,-2).trim()
Bugün 2020.05.13 Chrome v81.0, Safari v13.1 ve MacOs High Sierra v10.13.6'da Firefox v76.0'da seçilen çözümlerin testlerini yapıyorum.
slice(0,-1)
(D) hızlı veya kısa ve uzun dizeleri için en hızlı çözüm ve hızlı çapraz tarayıcı çözüm olarak önerilmektedirsubstring
(C) ve substr
(E) 'ye dayalı çözümler hızlıdırA , B , C , D , E ( dahili ), F , G (my) çözeltileri için iki test yapıyorum
Çözümler aşağıdaki snippet'te sunulmaktadır
Kısa dizeli Chrome için örnek sonuçlar
String.prototype.{ split, slice, substr, substring }
UTF-16 kodlu dizeleri üzerinde işlemÖnceki cevapların hiçbiri Unicode uyumlu değildir. Dizeler çoğu modern JavaScript motorunda UTF-16 olarak kodlanır, ancak daha yüksek Unicode kod noktaları yedek çiftler gerektirir , bu nedenle daha eski, önceden var olan dize yöntemleri Unicode kod noktalarında değil UTF-16 kod birimlerinde çalışır.
const string = "ẞ🦊";
console.log(string.slice(0, -1)); // "ẞ\ud83e"
console.log(string.substr(0, string.length - 1)); // "ẞ\ud83e"
console.log(string.substring(0, string.length - 1)); // "ẞ\ud83e"
console.log(string.replace(/.$/, "")); // "ẞ\ud83e"
console.log(string.match(/(.*).$/)[1]); // "ẞ\ud83e"
const utf16Chars = string.split("");
utf16Chars.pop();
console.log(utf16Chars.join("")); // "ẞ\ud83e"
Ayrıca, RegExp yanıtları, sondaki satır sonlarıyla şu anki formlarıyla eşleşmiyor:
const string = "Hello, world!\n";
console.log(string.replace(/.$/, "").endsWith("\n")); // true
console.log(string.match(/(.*).$/) === null); // true
Unicode farkında kod, dizenin yineleyicisini kullanır; görmek Array.from
ve ...
yaymak .
string[Symbol.iterator]
kullanılabilir (örneğin yerine string
).
Ayrıca bkz. Unicode dizesini JavaScript'teki karakterlere bölme .
Örnekler:
const string = "ẞ🦊";
console.log(Array.from(string).slice(0, -1).join("")); // "ẞ"
console.log([
...string
].slice(0, -1).join("")); // "ẞ"
s
ve u
bir bayraklarRegExp
dotAll
Veya s
bayrak markaları .
satır sonu karakterleri eşleştirmek, unicode
ya u
bayrak belli Unicode ilgili özellikleri sağlar.
Örnekler:
const unicodeString = "ẞ🦊",
lineBreakString = "Hello, world!\n";
console.log(lineBreakString.replace(/.$/s, "").endsWith("\n")); // false
console.log(lineBreakString.match(/(.*).$/s) === null); // false
console.log(unicodeString.replace(/.$/su, "")); // ẞ
console.log(unicodeString.match(/(.*).$/su)[1]); // ẞ
// Now `split` can be made Unicode-aware:
const unicodeCharacterArray = unicodeString.split(/(?:)/su),
lineBreakCharacterArray = lineBreakString.split(/(?:)/su);
unicodeCharacterArray.pop();
lineBreakCharacterArray.pop();
console.log(unicodeCharacterArray.join("")); // "ẞ"
console.log(lineBreakCharacterArray.join("").endsWith("\n")); // false
Bazı grafiklerin birden fazla kod noktasından 🏳️🌈
oluştuğunu , örneğin 🏳
(U + 1F3F3), VS16
(U + FE0F) , ZWJ
(U + 200D) , 🌈
(U + 1F308) dizilerinden oluştuğunu unutmayın. Burada bile Array.from
dört karaktere bölünecek. Bunları Unicode özelliğiyle eşleştirmek, dizi özellikleri teklifinden kaçar .
Bir dizenin sonuna yakın bir şeyi kaldırmak istediğiniz durumlarda (değişken boyutlu dizelerde) slice () ve substr () öğelerini birleştirebilirsiniz.
İşaretleme, dinamik olarak inşa edilmiş, virgülle ayrılmış bağlantı etiketleri listesi ile bir dize vardı. Dize şöyle bir şeydi:
var str = "<a>text 1,</a><a>text 2,</a><a>text 2.3,</a><a>text abc,</a>";
Son virgül kaldırmak için aşağıdakileri yaptım:
str = str.slice(0, -5) + str.substr(-4);
Bunu dene:
<script>
var x="foo_foo_foo_bar";
for (var i=0; i<=x.length; i++) {
if (x[i]=="_" && x[i+1]=="b") {
break;
}
else {
document.write(x[i]);
}
}
</script>
Canlı çalışma örneğini http://jsfiddle.net/informativejavascript/F7WTn/87/ adresinde de deneyebilirsiniz .
@Jason S:
Dilim kullanabilirsiniz! Sadece nasıl kullanılacağını bildiğinizden emin olmalısınız. Pozitif #'ler başlangıca, negatif sayılar sona göredir.
js> "12345.00". dilim (0, -1) 12345.0
Grafiğim için özür dilerim, ancak mesaj daha önce 'jquery' olarak etiketlenmişti. Yani, sen kullanamazsınız dilim () çünkü jQuery içindeki dilim () cevap Başka bir deyişle DOM öğeleri değil, alt dizeleri ... ile operasyonlar için jQuery yöntemidir @Jon Erickson gerçekten mükemmel bir çözüm önermek.
Ancak, yönteminiz basit Javascript içinde jQuery işlevi dışında çalışır. Yorumlardaki son tartışmalar nedeniyle, jQuery'nin kendi ebeveyninin en çok bilinen ECMAScript'inden çok daha fazla yenilenebilir JS uzantısı olduğunu söylemeliyim.
Burada da iki yöntem vardır:
bizim gibi:
string.substring(from,to)
'artı' dizini boşsa, dizenin geri kalanını döndürür. yani:
string.substring(from)
pozitif veya negatif ...
ve alt dize ve 'uzunluk' aralığı sağlayan diğer bazı - substr () - yalnızca pozitif olabilir:
string.substr(start,length)
Ayrıca bazı string.substr(start,length)
koruyucular MSIE için son yöntemin çalışmadığını veya hatalı çalıştığını öne sürüyor .
String.prototype.slice
doğal bir yöntemdir
slice()
DOM manipülasyonu için jQuery yöntemi: jQuery API: .slice () . VE Tabii ki, bu JS Array.slice () 'nin polimorfik bir mirasına benzetilebilir, ancak iki farklı yöntemdir ve bence bunu ayırmak gerekir. Bu sadece bu bilgiye bir yaklaşım.
.slice
Bir dize olan bir değişkeni çağırırsanız , OP'nin istediği şeyi yapar. Bu "jQuery içinde" olup olmadığı önemli değildir String.prototype
ve jQuery ile üzerine yazmadığınız sürece herhangi bir şekilde "müdahale" hiçbir yolu yoktur , eminim HERHANGİ bir javascript kodu çalışmasını engelleyecektir. Cevabınız sadece diğer cevabın iyi olmadığını ve sağladığınız argümanın yanlış olduğunu söylüyor.
.data
manipülasyonları yaparsanız ve bu "dize" ile bitirirseniz) olabileceğini slice
düşünüyorum. istediğini yapmazdım. Bununla birlikte, bu gerçekten yararlı bir cevap değil.
_Bar'ın solundaki her şeyi almak için alt dize kullanın. Ama önce dizede _bar instr değerini almak zorundasınız:
str.substring(3, 7);
3 başlangıçtır ve 7 uzunluktur.