У меня есть строка, 12345.00
и я хотел бы ее вернуть 12345.0
.
Я посмотрел trim
, но похоже, что это только обрезка пробелов, и slice
я не вижу, как это будет работать. Какие-либо предложения?
Math.round('0.5') === 1
;)
У меня есть строка, 12345.00
и я хотел бы ее вернуть 12345.0
.
Я посмотрел trim
, но похоже, что это только обрезка пробелов, и slice
я не вижу, как это будет работать. Какие-либо предложения?
Math.round('0.5') === 1
;)
Ответы:
Вы можете использовать функцию подстроки :
let str = "12345.00";
str = str.substring(0, str.length - 1);
console.log(str);
Это принятый ответ, но в соответствии с приведенными ниже разговорами синтаксис среза намного понятнее:
let str = "12345.00";
str = str.slice(0, -1);
console.log(str);
str = str.substring(0, str.length -1);
slice
и substring
методы все самое то же самое; кроме того, что slice()
принимает отрицательный индекс относительно конца строки, но не тот substring
, что выдает out-of-bound
ошибку
substring
это на 11% быстрее, чем slice
. jsperf.com/js-slice-vs-substring-test
Вы можете использовать ломтик ! Вы просто должны убедиться, что знаете, как им пользоваться. Положительные числа относятся к началу, отрицательные числа - к концу.
js>"12345.00".slice(0,-1)
12345.0
substring
метод и для динамических строк? Используя str.length для динамического получения длины?
Вы можете использовать метод substring строковых объектов JavaScript:
s = s.substring(0, s.length - 4)
Безоговорочно удаляет последние четыре символа из строки s
.
Однако, если вы хотите условно удалить последние четыре символа, только если они точно _bar
:
var re = /_bar$/;
s.replace(re, "");
slice
здесь лучше s.slice(0, -4)
Самый простой способ - использовать slice
метод строки, который допускает отрицательные позиции (соответствующие смещению от конца строки):
const s = "your string";
const withoutLastFourChars = s.slice(0, -4);
Если вам нужно что-то более общее, чтобы удалить все после (и в том числе) последнего подчеркивания, вы можете сделать следующее (при условии, что s
оно обязательно содержит хотя бы одно подчеркивание):
const s = "your_string";
const withoutLastChunk = s.slice(0, s.lastIndexOf("_"));
console.log(withoutLastChunk);
Для числа, подобного вашему примеру, я бы рекомендовал сделать это снова substring
:
console.log(parseFloat('12345.00').toFixed(1));
Обратите внимание, что на самом деле это будет округлять число, что, я думаю, желательно, но, возможно, нет:
console.log(parseFloat('12345.46').toFixed(1));
Используя функцию слайса JavaScript:
let string = 'foo_bar';
string = string.slice(0, -4); // Slice off last four characters here
console.log(string);
Это может быть использовано для удаления '_bar' в конце строки любой длины.
Попробуй это:
const myString = "Hello World!";
console.log(myString.slice(0, -1));
Как насчет:
let myString = "12345.00";
console.log(myString.substring(0, myString.length - 1));
Используйте регулярное выражение:
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));
Вот альтернатива, которую я не думаю, что видел в других ответах, просто для удовольствия.
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
РЕДАКТИРОВАТЬ: Кажется, что существует встроенная функция для этого, как указывает Паоло. Это решение, очевидно, намного чище, чем мое. Используйте parseFloat с последующим toFixed
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
Просто используйте отделку, если вы не хотите пробелов
"11.01 °C".slice(0,-2).trim()
Сегодня 2020.05.13 я выполняю тесты выбранных решений на Chrome v81.0, Safari v13.1 и Firefox v76.0 на MacOs High Sierra v10.13.6.
slice(0,-1)
(D) является быстрым или самым быстрым решением для коротких и длинных строк , и рекомендуются в качестве быстрого решения кроссбраузерногоsubstring
(C) и substr
(E), являются быстрымиЯ выполняю два теста для решений A , B , C , D , E ( ext ), F , G (мой)
Решения представлены в следующем фрагменте
Вот пример результатов для Chrome для короткой строки
String.prototype.{ split, slice, substr, substring }
работают с кодированными строками UTF-16Ни один из предыдущих ответов не поддерживает Unicode. Строки кодируются как UTF-16 в большинстве современных механизмов JavaScript, но для более высоких кодовых точек Unicode требуются суррогатные пары , поэтому более старые, уже существующие строковые методы работают с кодовыми единицами UTF-16, а не с кодовыми точками Unicode.
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"
Кроме того, ответы RegExp не соответствуют разрывам строк в конце в их текущей форме:
const string = "Hello, world!\n";
console.log(string.replace(/.$/, "").endsWith("\n")); // true
console.log(string.match(/(.*).$/) === null); // true
Юникод-ориентированный код использует итератор строки; увидеть Array.from
и ...
распространить .
string[Symbol.iterator]
можно использовать (например, вместо string
).
Также смотрите Как разделить строку Unicode на символы в JavaScript .
Примеры:
const string = "ẞ🦊";
console.log(Array.from(string).slice(0, -1).join("")); // "ẞ"
console.log([
...string
].slice(0, -1).join("")); // "ẞ"
s
и u
флаги наRegExp
В dotAll
или s
флаг марки .
соответствуют символы разрыва строки, то unicode
или u
флаг позволяет определенные Unicode-функции , связанные.
Примеры:
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
Обратите внимание, что некоторые графемы состоят из более чем одной кодовой точки, например, 🏳️🌈
которая состоит из последовательности 🏳
(U + 1F3F3), VS16
(U + FE0F) , ZWJ
(U + 200D) , 🌈
(U + 1F308). Здесь даже Array.from
разделим это на четыре «персонажа». Сопоставление с ними возможно с помощью свойства свойства Unicode, которое экранируется от последовательности .
В случаях, когда вы хотите удалить что-то, что находится ближе к концу строки (в случае строк переменного размера), вы можете объединить slice () и substr ().
У меня была строка с разметкой, динамически построенная, со списком тегов привязки, разделенных запятой. Строка была что-то вроде:
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);
Попробуй это:
<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/inforrativejavascript/F7WTn/87/ .
@ Джейсон С:
Вы можете использовать ломтик! Вы просто должны убедиться, что знаете, как им пользоваться. Положительные числа относятся к началу, отрицательные числа - к концу.
js> "12345.00" .slice (0, -1) 12345.0
Извините за мою графоманию, но пост был помечен как 'jquery' ранее. Таким образом, вы не можете использовать slice () внутри jQuery, потому что slice () - это метод jQuery для операций с элементами DOM, а не с подстроками ... Другими словами, ответ @Jon Erickson предлагает действительно идеальное решение.
Однако ваш метод будет работать из функции jQuery внутри простого Javascript. В связи с последним обсуждением в комментариях нужно сказать, что jQuery является гораздо более часто обновляемым расширением JS, чем его собственный родительский наиболее известный ECMAScript.
Здесь также существуют два метода:
как наш:
string.substring(from,to)
как плюс, если 'to' index nulled возвращает остаток строки. итак:
string.substring(from)
положительный или отрицательный ...
и некоторые другие - substr () - которые предоставляют диапазон подстроки и «length» могут быть только положительными:
string.substr(start,length)
Также некоторые сопровождающие полагают, что последний метод string.substr(start,length)
не работает или работает с ошибкой для MSIE.
String.prototype.slice
это нативный метод
slice()
метод jQuery для манипулирования DOM: API jQuery: .slice () . И конечно, это можно изобразить как полиморфное наследование JS Array.slice (), но это два разных метода, и я думаю, что это нужно различать. Так что это всего лишь приближение к этим знаниям.
.slice
переменную, которая является строкой, она будет делать именно то, что хотел OP. Не имеет значения, находится ли он «внутри jQuery», и нет никакого способа, которым он мог бы «вмешиваться» каким-либо образом, если только вы не перезапишите String.prototype
jQuery, что, я уверен, предотвратит работу ЛЮБОГО кода javascript. Ваш ответ просто говорит, что другой ответ не является хорошим, и аргумент, который вы предоставляете, неверен
.data
манипуляцию и в итоге получили эту «строку»), которая, если вы вызываете slice
ее, не будет делать то, что вы хотите. Тем не менее, это не очень полезный ответ.
Используйте подстроку, чтобы получить все слева от _bar. Но сначала вы должны получить значение _bar в строке:
str.substring(3, 7);
3 - это начало, а 7 - длина.