У мене є струна, 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
помилку
Можна використовувати скибочку ! Ви просто повинні переконатися, що знаєте, як ним користуватися. Позитивні # відносно початку, негативні числа відносно кінця.
js>"12345.00".slice(0,-1)
12345.0
substring
метод використовуватись і в динамічних рядках? Використовуючи str.length, щоб динамічно отримати довжину?
Ви можете використовувати метод підрядки об’єктів рядка 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
EDIT: Здається, що для цього існує вбудована функція, як вказує Паоло. Це рішення, очевидно, набагато чистіше, ніж моє. Використовуйте 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
(С) таsubstr
(Е) швидкіЯ виконую два тести для розчинів A , B , C , D , E ( ext ), F , G (my)
Рішення представлені у фрагменті нижче
Ось приклади результатів для Chrome для короткого рядка
String.prototype.{ split, slice, substr, substring }
оперувати на UTF-16 рядках, кодованихЖодна з попередніх відповідей не знає Unicode. У більшості сучасних двигунів JavaScript рядки кодуються як UTF-16, але для вищих точок коду 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
Unicode-відомий код використовує ітератор рядка; бачити 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
прапори на aRegExp
Значок 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/informativejavascript/F7WTn/87/ .
@Jason S:
Можна використовувати скибочку! Ви просто повинні переконатися, що знаєте, як ним користуватися. Позитивні # відносно початку, негативні числа відносно кінця.
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)
як плюс, якщо 'до' індекс нульовий повертає решту рядка. тому:
string.substring(from)
позитивні чи негативні ...
та деякі інші - substr (), які забезпечують діапазон підрядків та "довжина", можуть бути лише позитивними:
string.substr(start,length)
Також деякі технічні працівники вважають, що останній метод string.substr(start,length)
не працює або не працює з помилками для MSIE.
String.prototype.slice
є рідним методом
slice()
метод jQuery для маніпуляції з DOM: jQuery API: .slice () . І Впевнено, що це МОЖЕ бути представленим як поліморфне успадкування JS Array.slice (), але це два різні способи, і я думаю, що це потрібно розрізнити. Тож це лише наближення до цих знань.
.slice
на змінну, яка є рядком, вона зробить саме те, що хотіла ОП. Не має значення, чи він знаходиться "всередині jQuery", і немає ніякого способу "заважати" будь-яким чином, якщо ви не перезапишете String.prototype
jQuery, що, я впевнений, перешкоджатиме роботі будь-якого коду JavaScript. Ваша відповідь просто говорить, що інша відповідь не є доброю, і аргумент, який ви наводите, невірний.
.data
маніпуляції і закінчитеся цією "рядкою"), яка, якщо ви зателефонували slice
на неї, не робив би того, що хочеш. Однак це не дуже корисна відповідь.
Використовуйте підрядку, щоб отримати все ліворуч від _bar. Але спочатку потрібно отримати instr _bar у рядку:
str.substring(3, 7);
3 - це початок, а 7 - довжина.