如何在JavaScript中更改字符串中的单个字符

时间:2015-07-06 21:08:00

标签: javascript

在我的Meteor应用程序中,我有一组具有以下结构的对象

[{ type: "oldValue" }]

当我跑步时

testArray[0].type = 'test'
console.log(testArray[0].type)

'test'在控制台中正确打印。但是,当我跑

testArray[0].type[1] = 'd'
console.log(testArray[0].type)

'test'打印在控制台而不是'tdst'。第二个字母没有更改为d

如何更改字符串中的单个字符?

3 个答案:

答案 0 :(得分:3)

JavaScript字符串是不可变的。您无法更改其中的字符,并且您的问题中的赋值语句将被忽略。 (字符串不是对象,如果不清楚;它们是原始类型,虽然它们在某些方面看起来像对象,但它们不是。)

答案 1 :(得分:1)

正如@Pointy指出的那样,字符串是不可变的。如果要更改某些字符,可以使用一组字符:

var myString = 'hello there!'
myString = myString.split('')
myString[1] = 'a'
myString = myString.join('')
console.log(myString)     // 'hallo there!'

但是,per your comment,您可能希望迭代字符串一次,因为不断拆分和连接字符串可能会很慢:

function replaceCharacters (str, chars, conversionFunction) {
    var charBuff = []
    for (var i = 0; i < str.length; i++) {
        if (chars.indexOf(str[i])) {
            charBuff.push(conversionFunction(str[i]))
        } else {
            charBuff.push(str[i])
        }
    }
    return charBuff.join('')
}

的示例:

console.log(replaceCharacters('hello', 'al', function (myChar) { return 'Z' }))
// logs 'heZZo'
// you can pass an array or a string as the second parameter
// since `.indexOf` works on both strings and arrays

如果您正在使用es6:

function replaceCharacters (str, chars, conversionFunc) {
    return [...str].reduce((p, c) => {
        p.push(chars.indexOf(c) === -1 ? c : conversionFunc(c))
        return p
    }, []).join('')
}

答案 2 :(得分:1)

关于您的评论,您可以编写自己的转换器或使用he.js库。

关于后者,您可以在https://github.com/mathiasbynens/he

找到库

至于编写自己的转换器,这将为您提供一个良好的开端 How to convert characters to HTML entities using plain JavaScript