JavaScript chop/slice/trim off последний символ в строке
у меня есть строка, 12345.00
, и я хотел бы, чтобы он вернулся 12345.0
.
Я посмотрел на trim
, но похоже, что это только обрезка пробелов и slice
что я не вижу, как это будет работать. Есть предложения?
22 ответов
можно использовать фрагмент! Ты просто должен убедиться, что знаешь, как им пользоваться. Положительные #s относительно начала, отрицательные числа относительно конца.
js>"12345.00".slice(0,-1)
12345.0
можно использовать подстрока метод строковых объектов JavaScript:
s = s.substring(0, s.length - 4)
он безоговорочно удаляет последние четыре символа из строки s
.
однако, если вы хотите условно удалить последние четыре символа, только если они являются ровно _bar
:
var re = /_bar$/;
s.replace(re, "");
самый простой способ-использовать 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"
для такого числа, как ваш пример, я бы рекомендовал сделать это над substring
:
alert(parseFloat('12345.00').toFixed(1)); // 12345.0
обратите внимание, что это будет на самом деле круглое число, хотя, я бы предположил, желательно, но, возможно, нет:
alert(parseFloat('12345.46').toFixed(1)); // 12345.5
использование функции среза JavaScript:
var string = 'foo_bar';
string = string.slice(0, -4); // Slice off last four characters here
Это можно использовать для удаления '_bar' в конце строки любой длины.
"a string".match(/(.*).$/)[1] // => a strin
"a string".match(/(.*).$/) // returns ["a string", "a strin"]
"a string".match(/(.*).{2}$/)[1] // to get two chars off => a stri
- (.* ), захватывает любой символ несколько раз
- ., соответствует последнему символу, в этом случае
- $ соответствует концу строки
debris = string.split("_") //explode string into array of strings indexed by "_"
debris.pop(); //pop last element off the array (which you didn't want)
result = debris.join("_"); //fuse the remainng items together like the sun
вот альтернатива, которую я не думаю, что видел в других ответах, просто для удовольствия.
var strArr = "hello i'm a string".split("");
strArr.pop();
document.write(strArr.join(""));
Не так разборчиво или просто, как срез или подстрока, но позволяет играть со строкой, используя некоторые хорошие методы массива, поэтому стоит знать.
Если вы хотите сделать общее округление поплавков, а не просто обрезать последний символ:
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: похоже, что для этого существует встроенная функция, как указывает Паоло. Это решение, очевидно, намного чище моего. Использовать parseFloat следовал по toFixed
https://jsfiddle.net/invos/w3zeqv6v/
просто используйте trim, если вы не хотите пробелов
"11.01 °C".slice(0,-2).trim()
в случаях, когда вы хотите удалить что-то, что близко к концу строки (в случае строк переменного размера), вы можете объединить slice() и substr().
у меня была строка с разметкой, динамически построенная, со списком якорных тегов, разделенных запятой. Струна была что-то вроде:--3-->
var str = "<a>text 1,</a><a>text 2,</a><a>text 2.3,</a><a>text abc,</a>";
чтобы удалить последнюю запятую, я сделал следующее:
str = str.slice(0, -5) + str.substr(-4);
Я предпочитаю функцию substring:
var str = "12345.00";
str = str.подстрока (0, str.длина - 1);
функция среза также можно использовать:
var str = "12345.00";
str = str.slice (-1); // передача отрицательного значения в качестве первого аргумента удаляет символы из end. Это то же самое, что и str.slice (0, -1)
результат с обоими методами - "12345.0".
@Jason S:
вы можете использовать slice! Вы просто должны убедись, что знаешь, как им пользоваться. Положительные #s относительно начало, отрицательные числа относительно конца.
js> "12345.00".метод Slice(0,-1) 12345.0
извините за мой graphomany но пост был помечен 'библиотека jQuery' раньше. Итак,вы не можете использовать slice () внутри jQuery, потому что slice () такое jQuery метод для работы с элементами DOM, а не подстроки ... Другими словами, ответ @Jon Erickson предлагаю действительно идеальное решение.
однако ваш метод будет работать из функции jQuery, внутри простого Javascript. Нужно сказать из-за последнего обсуждения в комментариях, что jQuery очень часто является возобновляемым расширением JS, чем его собственный родитель, самый известный ECMAScript.
здесь также существуют два метода:
as наши:
string.substring(from,to)
as plus, если индекс " to " nulled возвращает остальную часть строки. Итак:
string.substring(from)
положительным или отрицательным ...
и некоторые другие - функцию substr (), которые обеспечивают диапазон подстроки и 'длина' может быть положительным только:
string.substr(start,length)
также некоторые разработчики предполагают, что последний метод string.substr(start,length)
не работает или работает с ошибкой для MSIE.
попробуйте это:
<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>
вы также можете попробовать живой рабочий пример наhttp://jsfiddle.net/informativejavascript/F7WTn/87/.
использовать substring, чтобы получить все, что слева от _bar. Но сначала вы должны получить instr _bar в строке:
str.substring(3, 7);
3-это начало, а 7-Длина.