Как я могу вставить строку по определенному индексу другой строки?
var txt1 = "foo baz"
Предположим, я хочу вставить «bar» после «foo», как мне этого добиться?
Я подумал substring()
, но должен быть более простой и прямой путь.
javascript
string
Jiew Meng
источник
источник
Ответы:
Вы можете создать свой собственный
splice()
в String.Polyfill
пример
РЕДАКТИРОВАТЬ: изменил его, чтобы убедиться, что
rem
это абсолютное значение.источник
slice
решение лучше и проще. (Сплайсинг деструктивен, срез - нет, и лучше избегать изменения «объектов, которые вы не знаете»). Это решение не должно быть первым видимым ответом, даже если оно имело смысл в то время.my_array[my_array.length] = item
вместоmy_array.push(item)
?splice
в этом деле; действительно, строки неизменны. По этой причине я думаю, чтоsplice
выбор плохого ключевого слова все же. Мое главное возражение против произвольного расширения прототипов, если они не являются стандартными полифиллами.Вставка по определенному индексу (а не, скажем, по первому пробелу) должна использовать срез строки / подстроку:
источник
substring
было бы хорошо здесь. Я предпочитаюslice
в целом, потому что он более гибкий (например, отрицательные показатели"foo baz".slice(1, -2)
). Это также немного короче, для немногого, что стоит.`${txt1.slice(0,3)}bar${txt1.slice(3)}`
delete
функцию, как указано выше; топ ответ ...Вот метод, который я написал, который ведет себя как все другие языки программирования:
Ссылка:
источник
{}
в блоки if-else.else
это избыточно.Просто сделайте следующую функцию:
и затем используйте это так:
Вывод: foo bar baz
Он ведет себя точно так же, как C # (Sharp) String.Insert (int startIndex, строковое значение).
ПРИМЕЧАНИЕ. Эта функция вставки вставляет строковое значение (третий параметр) перед указанным целочисленным индексом (вторым параметром) в строку str (первый параметр), а затем возвращает новую строку без изменения str !
источник
ОБНОВЛЕНИЕ 2016: Вот еще одна забавная (но более серьезная!) Функция-прототип, основанная на однострочном
RegExp
подходе (с предварительной поддержкойundefined
или отрицательнойindex
):Предыдущее (до 2012 года) решение для развлечения :
источник
Если кто-то ищет способ вставить текст с несколькими индексами в строку, попробуйте это:
Например, вы можете использовать это для вставки
<span>
тегов с определенными смещениями в строку:источник
6: "<span>"
говорит: в индексе 6 вставьте текст "<span>". Вы говорите, что хотите использовать значение целочисленной переменной в качестве индекса вставки? Если это так, попробуйте что-то вродеvar a=6, text = {}; text[a] = "<span>";
Это в основном то, что делает @ Bass33, за исключением того, что я также даю возможность использовать отрицательный индекс для подсчета с конца. Вроде как метод substr позволяет.
Вариант использования: Допустим, у вас есть полноразмерные изображения с использованием соглашения об именах, но вы не можете обновить данные, чтобы также предоставить URL-адреса миниатюр.
источник
Учитывая ваш текущий пример, вы можете достичь результата либо
или
но, учитывая, что вы можете делать такие предположения, вы можете также перейти непосредственно к примеру Гуллена.
В ситуации, когда вы действительно не можете делать никаких предположений, кроме символьного индекса, тогда я действительно выбрал бы решение для подстроки.
источник
https://jsfiddle.net/gaby_de_wilde/wz69nw9k/
источник
Я знаю, что это старая тема, но здесь действительно эффективный подход.
Что в этом хорошего, так это то, что он принуждает содержимое узла. Поэтому, если бы этот узел уже был в DOM, вам не нужно было бы использовать какие-либо селекторы запросов или обновлять innerText. Изменения будут отражены из-за его обязательности.
Если вам нужна строка, просто получите доступ к свойству текстового содержимого узла.
источник
Ну, мы можем использовать метод подстроки и слайса.
Единственная проблема метода подстроки заключается в том, что он не будет работать с отрицательным индексом. Он всегда берет строковый индекс с 0-й позиции.
источник
Так что для вас это было бы
insertString("foo baz", "bar", 3);
Очевидно, что это было бы краской для использования, потому что вы должны каждый раз вводить свою строку для функции, но в настоящий момент я не знаю, как превратить ее в нечто более простое, например a
string.replace(insertion, place)
. Идея все еще стоит, хотя.источник
Вы можете использовать регулярные выражения с динамическим шаблоном.
выходы:
Это заменяет
text.length
пробельные символы в начале строкиoutput
. ВRegExp
средства^\
- начиная от линии\s
любого белого символа пробела, повторяющиеся{n}
разы, в этом случаеtext.length
. Используется\\
для\
избежания обратной косой черты при построении шаблонов такого типа из строк.источник
другое решение, разрезать строку на 2 и положить строку между ними.
источник
Вы можете сделать это легко с помощью регулярного выражения в одной строке кода
"Привет, Прекрасный RegExp!"
источник
Используя ломтик
Вы можете использовать
slice(0,index) + str + slice(index)
. Или вы можете создать метод для этого.Метод сращивания для строк
Вы можете
split()
основную строку и добавить затем использовать обычныйsplice()
Применение splice () для нескольких индексов
Метод принимает массив массивов каждый элемент массива, представляющий один
splice()
.источник
Я хотел сравнить метод с использованием подстроки и метод с использованием среза из Base33 и user113716 соответственно, для этого я написал некоторый код
также посмотрите на это сравнение производительности, подстрока, срез
Код, который я использовал, создает огромные строки и вставляет строку "bar" несколько раз в огромную строку
Общее различие в производительности в лучшем случае незначительно, и оба метода работают нормально (даже для строк длиной ~ ~ 12000000)
источник
Преимущества этого подхода двояки:
источник