在我的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
。
如何更改字符串中的单个字符?
答案 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