#javascript #jquery
#javascript #jquery
Вопрос:
предположим, что у меня есть
var name = «канишка»;
Как я могу вырезать только последний символ, чтобы на выходе вместо него было ‘a’?
я прочитал вопрос
Как я могу вырезать первый символ из строки в jquery?
автор jin Yong ,
в этой задаче я знаю длину строки . можете ли вы сказать мне, как я могу это сделать, не зная длины строки.
не удалось получить помощь из ответов, пожалуйста, помогите
Ответ №1:
Используя обычный javascript, вы можете сделать
name.charAt(name.length-1)
Дополнительная информация о charAt http://www.w3schools.com/jsref/jsref_charat.asp
Комментарии:
1. Наконец-то кто-то использует свой мозг, а не подстроку (что бессмысленно и глупо в данном случае)! 1. конечно, учитывая, что строка является массивом, вы даже можете сделать
name[name.length-1]
.2. @OJ: Как ты думаешь, почему
substring()
это хуже, чемcharAt()
здесь, кроме того, что он на несколько символов длиннее? Кстати, доступ к символам в строке через числовые имена свойств был нестандартным до ECMAScript 5 и не поддерживался в IE 7 или более ранних версиях (не уверен насчет IE 8).3. @Tim:
[]
поддерживается в IE8. Не так, как вы сказали, в IE7 или более ранних версиях. @OJ: Строки не являются массивами.String
поддерживается[]
в современных браузерах, но это все еще не массив.
Ответ №2:
Array.prototype.pop.apply(name);
^_^
или, если вы хотите быть скучным:
name.substr(name.length-1);
или:
name.split('').reverse().shift()
или:
name.split(name.substr(0, name.length-1)).pop()
или:
name.constructor.prototype.charAt.call(name.split('').reverse(), 0)
или:
var chr; name.split('').forEach(function(c){ chr=c; });
или (ладно, это серьезно):
/.$/.exec(name)[0]
или
name[name.length-1];
Комментарии:
1. Все они скучны, учитывая, что для извлечения одного символа вы можете индексировать непосредственно в массив и избежать всех накладных расходов, которые вы предложили.
2. @OJ — что, не нравятся мои ненужные накладные расходы ?!? 🙁
3. @OJ: Вы можете использовать только
[]
, если вас не волнует поддержка IE6 и IE7. (IE6 IE7 составляют 10-20% пользователей браузера, и эта цифра — к счастью! — быстро падает, но все еще значимо).4. @TJ Да, приятель, ты прав. Эти браузеры — это ЛАВАШ. Я лично отказываюсь поддерживать такие старые браузеры (два основных номера версий позади — это шутка, и IE10 не за горами). Давайте сделаем своим долгом заставить людей обновлять 🙂
Ответ №3:
Если вы хотите, чтобы «a» в «kanishka»:
var name = "kanishka";
name = name.substring(name.length - 1);
Комментарии:
1. что со всеми
-2
в ответах? Это даст вам ‘ka’2. @cwolves: Это была опечатка, очевидно, вы заметили это до того, как я исправил. 🙂
3. нажимает кнопку ааааааааааааааааааааааааааааааааааааа
4.
name.slice(-1)
немного аккуратнее.
Ответ №4:
name = name.substr(name.length-1,name.length);
Комментарии:
1. ему нужен последний символ, а не строка до последнего
2. попробуйте еще раз! 🙂 Чего вы хотите:
name.substr(name.length-1)
Ответ №5:
Обзор ваших вариантов, представленных различными ответами здесь:
(обратите внимание, что это ответ CW, поскольку он представляет контент сообщества)
-
substring
:var lastChar = name.substring(name.length - 1);
- Подробно, но понятно.
- Широко поддерживается.
-
substr
:var lastChar = name.substr(name.length - 1);
- Многословный (думал, чуть менее подробный), но понятный.
- Широко поддерживается (хотя и не строго стандартен, и в некоторых браузерах есть крайние случаи; см. Комментарии).
-
slice
:var lastChar = name.slice(-1);
- Лаконичный, понятный, как только вы привыкнете к идиоме, но непонятный для не-l33t c0d3rz.
- Широко поддерживается.
- Обычно работает медленнее или медленнее всего в большинстве браузеров (но не во всех).
-
charAt
:var lastChar = name.charAt(name.length - 1);
- Подробный, но очень понятный.
- Широко поддерживается.
- Самый быстрый (или привязанный к самому быстрому с
[]
) в большинстве браузеров (обычно со значительным отрывом).
-
[]
:var lastChar = name[name.length - 1];
- Лаконично и понятно.
- Не поддерживается IE7 и более ранними версиями.
- Самый быстрый (или привязанный к самому быстрому с
charAt
) в большинстве браузеров (обычно со значительным отрывом).
(При всем уважении к нестандартным подходам cwolves, я придерживался мейнстрима, как скучный труженик, которым я и являюсь.)
Что вы должны использовать? Это полностью зависит от вас. Обратите внимание, что все вышеперечисленные опции выполняются достаточно быстро, вероятность того, что скорость этой операции действительно важна в 99,999% реальных случаев, действительно очень мала.
Комментарии:
1.
substr()
не является строго стандартным, хотя, как вы говорите, он широко поддерживается. Его реализация немного отличается в IE 7 (опять же, не уверен насчет 8 или 9) от других браузеров тем, что отрицательный символьный индекс обрабатывается как 0, а не вычитается из длины.2. @TIm: Эй, посмотри на это. Это не в основной спецификации, а в приложении к ней (B.2.3, если быть точным, как в 3-м, так и в 5-м изданиях). Неудивительно, что я никогда не использую
substr
. 🙂3. J.:
slice()
это то место, где он находится для подстрок в JS. Он стандартный, имеет отрицательные смещения для l33t c0d3rz и поддерживается повсеместно.
Ответ №6:
Аккуратный, короткий, кроссбраузерный способ — это
name.slice(-1);
Комментарии:
1. Неплохо. 🙂 Любопытно, что это, как правило, медленный вариант в нескольких браузерах (не то чтобы это имело значение), и я не могу понять, почему. Смотрите в сообщении CW округление параметров.