题 JavaScript切断/切片/修剪字符串中的最后一个字符


我有一个字符串, 12345.00,我希望它能回来 12345.0

我看过了 trim,但看起来它只是修剪空白和 slice 我不明白这是怎么回事。有什么建议么?


1485
2018-06-04 20:31


起源


你关心四舍五入吗? 12345.46 = 12345.5或12345.4? - RSolberg
你知道后缀是什么,或者你想根据下划线拆分和删除最后一个单词吗? - Cᴏʀʏ
何浩浩,@ RSolberg:你做不到 回合 一根绳子! - Ziggy
@Ziggy说什么? Math.round('0.5') === 1 ;) - TWiStErRob
@TWiStErRob哦JavaScript,我该怎么办? *摇头* - Chuck Le Butt


答案:


你可以使用  功能:

var str = "12345.00";
str = str.substring(0, str.length - 1); // "12345.0"

这是接受的答案,但根据下面的对话,  语法更清晰:

var str = "12345.00";
str = str.slice(0, -1); // "12345.0"

2463
2018-06-04 20:35



str.slice(0, - 1);也会工作:) - Khodor
@Kheu - 切片符号对我来说更清晰。我以前使用的是子串版本。谢谢! - Matt Ball
原谅我,如果我错了,但你不需要再次将str.substring的值赋给str吗?喜欢 str = str.substring(0, str.length -1); - Doug Molineux
该 slice & substring 方法都是一样的;除了那个 slice() 接受相对于字符串结尾的负索引,但不接受 substring,它抛出 out-of-bound 错误 - Amol M Kulkarni
substring是疯狂的微优化,我认为你不应该这样做。最大限度地提高可读性。然后根据需要优化低挂水果。 - Alfred


您可以使用 !你只需要确保你知道如何使用它。正#s相对于开头,负数相对于结尾。

js>"12345.00".slice(0,-1)
12345.0

1155
2018-06-04 21:41



与已接受的解决方案相比,这种方式更加优雅,即使使用动态创建的字符串也可以使用 - Sameer
性能也类似。 jsperf.com/slice-vs-substring-trim-end - Chad von Nau
有什么用 js>?这是命令行吗? - Man Personson
我用jsdb(jsdb.org)作为快速测试shell。强烈推荐。 - Jason S
我喜欢这种方式,因为它与php思考substr函数,更容易记住和动态写。 - pathfinder


你可以使用  JavaScript字符串对象的方法:

s = s.substring(0, s.length - 4)

它无条件地从字符串中删除最后四个字符 s

但是,如果你愿意的话 有条件的 删除最后四个字符,只有它们是 究竟  _bar

var re = /_bar$/;
s.replace(re, "");

248
2017-08-30 03:08



slice 在这里更好。 s.slice(0, -4) - Tim Down
或者:s.slice(0, - “_ bar”.length)(如果不想对字符数进行硬编码,则非常有用) - Mahn
我喜欢这个,因为他也帮助替换指定的结尾。 - Mike Graf


最简单的方法是使用 slice 字符串的方法,允许负位置(对应于字符串末尾的偏移量):

var s = "your string";
var withoutLastFourChars = s.slice(0, -4);

如果您需要更通用的东西来删除最后一个下划线之后的所有内容,您可以执行以下操作(只要 s 保证至少包含一个下划线):

var s = "your_string";
var withoutLastChunk = s.slice(0, s.lastIndexOf("_"));
// withoutLastChunk == "your"

150
2017-08-30 10:15





对于像你的例子这样的数字,我建议这样做 substring

alert(parseFloat('12345.00').toFixed(1)); // 12345.0

请注意,这实际上会围绕数字,但我认为这是期望但可能不是:

alert(parseFloat('12345.46').toFixed(1)); // 12345.5

63
2018-06-04 20:42



+1这就是OP所需要的,忘记了有一些字符串需要修剪的错误假设。 - naugtur
这不是一个错误的假设,OP谈论字符串。你的假设是错误的,因为OP不会谈论舍入数字。 - Fernando


使用JavaScript的切片功能:

var string = 'foo_bar';
string = string.slice(0, -4); // Slice off last four characters here

这可用于删除任何长度的字符串末尾的'_bar'。


19
2018-02-27 11:14





您正在寻找正则表达式:

var str = "foo_bar";
alert(str.replace(/_bar$/, ""));

13
2017-08-30 03:09



您的解决方案有效,但Alex的答案更全面。所以我会接受他的。谢谢! - Albert
这解决了条件删除而不是盲目截断的相关问题 - Aaron