在特定索引处插入字符串

IT技术 javascript string
2021-01-28 18:13:01

如何在另一个字符串的特定索引处插入一个字符串?

 var txt1 = "foo baz"

假设我想在“foo”之后插入“bar”,我该如何实现?

我想到了substring(),但必须有更简单更直接的方法。

6个回答

在特定索引处插入(而不是在第一个空格字符处)必须使用字符串切片/子字符串:

var txt2 = txt1.slice(0, 3) + "bar" + txt1.slice(3);
ES6 是否提供了更好的选择?至少可以使用字符串插值,比如`${txt1.slice(0,3)}bar${txt1.slice(3)}`
2021-03-22 18:13:01
@AlejandroSalamancaMazuelo:substring这里没问题。slice一般更喜欢,因为它更灵活(负指数,例如"foo baz".slice(1, -2))。它也稍微短一些,因为那是值得的。
2021-03-25 18:13:01
这不使用上述delete功能最佳答案...
2021-04-08 18:13:01
@Mr.Polywhirl:不。这个问题没有提到需要这样做。
2021-04-08 18:13:01

您可以将自己的原型制作splice()为 String。

填充物

if (!String.prototype.splice) {
    /**
     * {JSDoc}
     *
     * The splice() method changes the content of a string by removing a range of
     * characters and/or adding new characters.
     *
     * @this {String}
     * @param {number} start Index at which to start changing the string.
     * @param {number} delCount An integer indicating the number of old chars to remove.
     * @param {string} newSubStr The String that is spliced in.
     * @return {string} A new string with the spliced substring.
     */
    String.prototype.splice = function(start, delCount, newSubStr) {
        return this.slice(0, start) + newSubStr + this.slice(start + Math.abs(delCount));
    };
}

例子

String.prototype.splice = function(idx, rem, str) {
    return this.slice(0, idx) + str + this.slice(idx + Math.abs(rem));
};

var result = "foo baz".splice(4, 0, "bar ");

document.body.innerHTML = result; // "foo bar baz"


编辑:修改它以确保它rem是一个绝对值。

我知道这是 2010 年的,但下面的slice解决方案更好更简单。(拼接是破坏性的,切片不是,最好避免修改“你不知道的对象”)。这个解决方案绝对不应该是第一个可见的答案,即使它当时可能是有意义的。
2021-03-24 18:13:01
修改内置对象非常糟糕的做法。正如我们在SmooshGate 中看到的那样,随着新功能被添加到语言中,这可能会破坏你的代码,如果你不负责任的修改以某种方式进入了一个在网络上被大量采用的库,它可能会阻止使用简单、清晰的方法名称用于新功能。
2021-03-27 18:13:01
@EirikBirkeland:字符串是不可变的。上面的代码不会修改任何对象。无论哪种方式,您不修改“您不知道的对象”的想法都会排除 Array 突变方法。你说你宁愿做my_array[my_array.length] = item而不是my_array.push(item)
2021-03-28 18:13:01
对不起,我的意思是“你不拥有的对象”。splice在这种情况下你是对的确实字符串是不可变的。出于这个原因,我认为这splice是一个糟糕的关键词选择。我的主要反对意见是反对任意扩展原型,除非它们是标准的 polyfill。
2021-04-02 18:13:01

这是我编写的一个方法,它的行为与所有其他编程语言一样:

String.prototype.insert = function(index, string) {
  if (index > 0) {
    return this.substring(0, index) + string + this.substr(index);
  }

  return string + this;
};

//Example of use:
var something = "How you?";
something = something.insert(3, " are");
console.log(something)

参考:

不,不需要。但是else是多余的。
2021-03-23 18:13:01
您可能需要{}在 if-else 块中添加花括号
2021-04-01 18:13:01

只需执行以下功能:

function insert(str, index, value) {
    return str.substr(0, index) + value + str.substr(index);
}

然后像这样使用它:

alert(insert("foo baz", 4, "bar "));

输出: foo bar baz

它的行为与 C# (Sharp) String.Insert(int startIndex, string value) 完全一样。

注意:此插入函数在字符串str(第一个参数)中指定整数索引(第二个参数)之前插入字符串(第三个参数),然后在不更改str 的情况下返回新字符串

如果有人正在寻找一种在字符串中的多个索引处插入文本的方法,请尝试以下操作:

String.prototype.insertTextAtIndices = function(text) {
    return this.replace(/./g, function(character, index) {
        return text[index] ? text[index] + character : character;
    });
};

例如,您可以使用它<span>在字符串中的某些偏移处插入标签:

var text = {
    6: "<span>",
    11: "</span>"
};

"Hello world!".insertTextAtIndices(text); // returns "Hello <span>world</span>!"
是的,我想使用整数变量作为插入,您的方法有效-谢谢-这就是我使用的 var a=6; 无功b=11;文字 = {}; 文本[a] = "xx";文本[b] = "yy"; - 有没有更好的写法
2021-03-17 18:13:01
6 和 11 是将文本插入到字符串中的索引。 6: "<span>"说:在索引 6 处,插入文本“<span>”。你是说要使用整数变量的值作为插入索引吗?如果是这种情况,请尝试类似var a=6, text = {}; text[a] = "<span>";
2021-03-28 18:13:01
我尝试了这种方法,但用变量替换了“6”和“11”,但它不起作用-我做错了什么-请帮忙。提前致谢 :)
2021-04-08 18:13:01