【问题标题】:Function to increment each letter's ASCII value in a string only returns one letter增加字符串中每个字母的 ASCII 值的函数只返回一个字母
【发布时间】:2021-04-15 14:03:32
【问题描述】:

我使用 JavaScript 编写了一个函数来遍历给定的字符串并递增每个字母值并返回新字符串。这是我的代码的样子:

function alphabeticShift(inputString) {
  for (var i = 0; i <inputString.length; i++){
    var newString = []
    newString.push(String.fromCharCode(inputString.charCodeAt(i) + 1))

  }
  return newString.toString()
}

alphabeticShift('abc')

由于某种原因,该函数仅返回递增字符串的最后一个字母。我不知道我哪里错了。

【问题讨论】:

  • const f = s =&gt; s.replace(/./g, m =&gt; String.fromCharCode(m.charCodeAt(0) + 1));
  • newString 数组应该在循环之外。现在您正在为每个字母创建一个新数组,因此当您返回时,只返回最后一个字母的数组作为结果。

标签: javascript arrays string tostring


【解决方案1】:

您在每次迭代时都重新初始化数组。将var newString = [] 行移到循环外

同时使用Array.prototype.join() 而不是.toString(),因为后者会插入逗号

function alphabeticShift(inputString) {
  var newString = []
  for (var i = 0; i < inputString.length; i++) {
    newString.push(String.fromCharCode(inputString.charCodeAt(i) + 1))

  }
  return newString.join("")
}

console.log(alphabeticShift('abc'))

【讨论】:

    【解决方案2】:

    问题

    正如 Tibebes 所提到的,您正在循环中的每次迭代中重新初始化数组。

    阵列解决方案的替代方案

    这是一个使用字符串连接而不是数组的解决方案。

    function alphabeticShift(inputString) {
      let newString = "";
      for (let i = 0; i <inputString.length; i++){
        
        newString += (String.fromCharCode(inputString.charCodeAt(i) + 1))
    
      }
      return newString;
    }
    
    const res = alphabeticShift('abc')
    
    console.log(res);

    【讨论】:

      【解决方案3】:

      ES6

      const alphabeticShift = str => [...str]
        .map(char => String.fromCharCode(char.charCodeAt(0)+1))
        .join('');
      
      const res = alphabeticShift('abc')
      console.log(res);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-09
        • 2017-04-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-22
        • 1970-01-01
        相关资源
        最近更新 更多