javascript - 为什么我不能为数组中的字符串分配新值?
问题描述
在字符串中的每个单词中,每个单词中的每个偶数索引字符都应该大写。
示例:“这是一个样本”->“这是一个样本”
我知道这不是解决此问题的最佳解决方案,但我想了解为什么最后一个分配不起作用。
function toWeirdCase(string) {
const arr = string.toLowerCase().split(' ')
for (let i = 0; i < arr.length; i++) {
for (let j = 0; j < arr[i].length; j += 2) {
let temp = arr[i][j] // temp = t, i, i
temp = temp.toUpperCase() // temp = T, I, I
arr[i][j] = temp // arr[i][j] = t, i, i but why not T, I, I
}
}
return arr.join(' ')
}
console.log(toWeirdCase('This is'))
解决方案
arr
是一个字符串数组,因此arr[i]
是一个字符串并arr[i][j] = temp
尝试更改字符串中的字符,但在 JavaScript 中,字符串是不可变的。
它在字符串的 JavaScript 文档中进行了解释:
当使用括号表示法进行字符访问时,尝试删除这些属性或为这些属性赋值将不会成功。所涉及的属性既不可写也不可配置。
为了解决您的任务,您可以将打乱的值构建到一个新字符串中(让我们命名它mixed
,通过一次附加一个字符( )然后,mixed = mixed + temp.toUpperCase()
在外部for
放回:mixed
arr[i]
const arr = str.toLowerCase().split(' ')
for (let i = 0; i < arr.length; i++) {
let mixed = '';
for (let j = 0; j < arr[i].length; j++) {
let temp = arr[i][j]
// Turn to uppercase the characters on even positions
if (j % 2 === 0) {
temp = temp.toUpperCase()
}
mixed = mixed + temp
}
// Put the processed word back into the array
arr[i] = mixed
}
推荐阅读
- c# - DataContract 在没有 DataContractAttribute 的情况下工作(直到混淆)
- javascript - Sequelize JS如何处理验证
- reactjs - 如何从 react redux 组件中删除 cookie?
- java - GirdBagLayout 混乱
- javascript - 一种在另一个 html 中使用对象标签显示网页而不使用 jquery 的更好方法,只是普通的 javascript
- php - 获取两个日期之间的出现次数/次数
- node.js - 在 NodeJs 中使用 findOne() 时出现 UnhandledPromiseRejectionWarning
- react-native - 存储来自 api 调用 React native 的结果
- python - 遍历字典中的函数
- ms-access - 在子表单中级联组合框