首页 > 解决方案 > 为什么我不能为数组中的字符串分配新值?

问题描述

在字符串中的每个单词中,每个单词中的每个偶数索引字符都应该大写。

示例:“这是一个样本”->“这是一个样本”

我知道这不是解决此问题的最佳解决方案,但我想了解为什么最后一个分配不起作用。

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'))

标签: javascript

解决方案


arr是一个字符串数组,因此arr[i]是一个字符串并arr[i][j] = temp尝试更改字符串中的字符,但在 JavaScript 中,字符串是不可变的。

它在字符串的 JavaScript 文档中进行了解释:

当使用括号表示法进行字符访问时,尝试删除这些属性或为这些属性赋值将不会成功。所涉及的属性既不可写也不可配置。

为了解决您的任务,您可以将打乱的值构建到一个新字符串中(让我们命名它mixed,通过一次附加一个字符( )然后,mixed = mixed + temp.toUpperCase()在外部for放回:mixedarr[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
}

推荐阅读