【问题标题】:what is the reason for the code not working as expected?代码无法按预期工作的原因是什么?
【发布时间】:2022-11-04 20:43:58
【问题描述】:

所需的项目是将大写字母变为小写字母,反之亦然。我不明白为什么我的代码没有按预期工作。

代码如下:

let start4 = 0;
let swappedName = "elZerO";

for (let i = 0; i < swappedName.length; i++) {
  if (swappedName[i] === swappedName[i].toLowerCase()) {
    swappedName[i].toUpperCase();
  } else {
    swappedName[i].toLowerCase();
  }
  console.log(swappedName);
}

代码的结果在文本中没有任何变化。

【问题讨论】:

  • 值得注意的是,我仍然是 JS 的初学者。所以请尽量在不使用任何高级代码的情况下尽可能简单地解决这个问题。
  • 它不起作用,因为swappedName[i].toUpperCase();swappedName[i].toLowerCase(); 只是在i 位置获取字符的大写和小写版本并丢弃该结果。您需要使用结果更新字符串。就我个人而言,我会将字符串代码点展开到数组[... swappedName] 中,使用数组操作方法更改字符串中每个位置的代码点,然后使用Array#join 创建要返回的字符串。
  • String.prototype.toUpperCase() 方法不会改变字符串;它返回一个新的。您必须将结果分配回变量中。
  • 好的。现在我明白了这个问题。非常感谢 !

标签: javascript loops for-loop conditional-statements


【解决方案1】:

它不起作用,因为swappedName[i].toUpperCase();swappedName[i].toLowerCase(); 只是在i 位置获取字符的大写和小写版本并丢弃该结果。

您需要使用结果更新字符串。

就个人而言,我会将字符串代码点传播到数组[... swappedName],使用数组操作方法更改字符串中每个位置的代码点,然后使用Array#join 创建要返回的字符串。

这是使用Array#map 的解决方案。

const invert = (s) => {
    const arr = [...s]
    return arr.map((cp) =>
        cp === cp.toLowerCase() 
            ? cp.toUpperCase() 
            : cp.toLowerCase()).join('')
}

let swappedName = "elZerO";
console.log(invert(swappedName))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-06
    • 2013-09-17
    • 2012-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-29
    相关资源
    最近更新 更多