Como posso inserir uma string em um índice específico de outra string?
var txt1 = "foo baz"
Suponha que eu queira inserir "bar" após o "foo", como posso conseguir isso?
Pensei substring()
, mas deve haver uma maneira mais simples e direta.
javascript
string
Jiew Meng
fonte
fonte
Respostas:
Você pode criar um protótipo
splice()
para String.Polyfill
Exemplo
EDIT: Modificado para garantir que
rem
seja um valor absoluto.fonte
slice
solução abaixo é melhor e mais simples. (A emenda é destrutiva, a fatia não, e é melhor evitar modificar "objetos que você não conhece"). Esta solução absolutamente não deve ser a primeira resposta visível, mesmo que tenha feito sentido na época.my_array[my_array.length] = item
vez demy_array.push(item)
?splice
neste caso; de fato, as cordas são imutáveis. Por esse motivo, acho quesplice
é uma má escolha de palavras-chave. Minha principal objeção é contra a extensão arbitrária de protótipos, a menos que sejam polyfills padrão.A inserção em um índice específico (em vez de, digamos, no primeiro caractere de espaço) deve usar a segmentação / segmentação de sequência de caracteres:
fonte
substring
ficaria bem aqui. Eu prefiroslice
em geral porque é mais flexível (índices negativos, por exemplo"foo baz".slice(1, -2)
). Também é um pouco mais curto, pelo pouco que vale a pena.`${txt1.slice(0,3)}bar${txt1.slice(3)}`
delete
recurso, conforme incluído acima; resposta superior ...Aqui está um método que escrevi que se comporta como todas as outras linguagens de programação:
Referência:
fonte
{}
nos blocos if-else.else
é redundante.Basta fazer a seguinte função:
e depois use-o assim:
Saída: foo bar baz
Ele se comporta exatamente, como o C # (Sharp) String.Insert (int startIndex, valor da string).
NOTA: Esta função de inserção insere o valor da string (terceiro parâmetro) antes do índice inteiro especificado (segundo parâmetro) na string str (primeiro parâmetro) e, em seguida, retorna a nova string sem alterar str !
fonte
ATUALIZAÇÃO 2016: Aqui está outra função de protótipo divertida (mas mais séria!) Baseada na
RegExp
abordagem de uma linha (com suporte de prefixundefined
ou negativoindex
):Solução anterior (de volta a 2012) apenas por diversão :
fonte
Se alguém estiver procurando uma maneira de inserir texto em vários índices em uma string, tente o seguinte:
Por exemplo, você pode usar isso para inserir
<span>
tags em certas compensações em uma string:fonte
6: "<span>"
diz: no índice 6, insira o texto "<span>". Você está dizendo que deseja usar o valor de uma variável inteira como índice de inserção? Se for esse o caso, tente algo comovar a=6, text = {}; text[a] = "<span>";
Isso é basicamente fazer o que @ Bass33 está fazendo, exceto que eu também estou dando a opção de usar um índice negativo para contar a partir do final. Como o método substr permite.
Caso de uso: digamos que você tenha imagens em tamanho real usando uma convenção de nomenclatura, mas não pode atualizar os dados para também fornecer URLs em miniatura.
fonte
Dado o seu exemplo atual, você pode obter o resultado quer
ou
mas, como você pode fazer essas suposições, você também pode pular diretamente para o exemplo de Gullen.
Em uma situação em que você realmente não pode fazer nenhuma suposição que não seja baseada no índice de caracteres, eu realmente procuraria uma solução de substring.
fonte
https://jsfiddle.net/gaby_de_wilde/wz69nw9k/
fonte
Eu sei que este é um tópico antigo, no entanto, aqui está uma abordagem realmente eficaz.
O que é ótimo nisso é que ele coage o conteúdo do nó. Portanto, se esse nó já estivesse no DOM, você não precisaria usar nenhum seletor de consulta ou atualizar o innerText. As alterações refletiriam devido à sua ligação.
Se você precisar de uma sequência, basta acessar a propriedade de conteúdo de texto do nó.
fonte
Bem, podemos usar os métodos substring e slice.
O único problema de um método de substring é que ele não funcionará com um índice negativo. É sempre pegar o índice de string da 0ª posição.
fonte
Então, para você, seria
insertString("foo baz", "bar", 3);
Obviamente, isso seria uma tinta para usar, porque você precisa fornecer sua string para a função todas as vezes, mas no momento não sei como torná-la algo mais fácil, como a
string.replace(insertion, place)
. A idéia ainda permanece, no entanto.fonte
Você pode usar expressões regulares com um padrão dinâmico .
saídas:
Isso substitui os
text.length
caracteres de espaço em branco no início da stringoutput
. OsRegExp
meios^\
- início de uma linha,\s
qualquer caractere de espaço em branco, repetidas{n}
vezes, neste casotext.length
. Use\\
para\
escapar de barras invertidas ao criar esse tipo de padrão a partir de strings.fonte
outra solução, corte a corda em 2 e coloque-a no meio.
fonte
Você pode fazer isso facilmente com regexp em uma linha de código
"Olá, adorável RegExp!"
fonte
Usando fatia
Você pode usar
slice(0,index) + str + slice(index)
. Ou você pode criar um método para isso.Método de emenda para Strings
Você pode
split()
a string principal e adicionar e usar o normalsplice()
Aplicando splice () em vários índices
O método utiliza uma matriz de matrizes, cada elemento da matriz representando um único
splice()
.fonte
Eu queria comparar o método usando substring e o método usando slice da Base33 e user113716 respectivamente, para fazer isso, escrevi algum código
também dê uma olhada nessa comparação de desempenho, substring, fatia
O código que eu usei cria cadeias enormes e insere a "barra" da cadeia várias vezes na cadeia enorme
A diferença geral de desempenho é marginal, na melhor das hipóteses, e ambos os métodos funcionam muito bem (mesmo em cadeias de comprimento ~~ 12000000)
fonte
Os benefícios dessa abordagem são duplos:
fonte