【问题标题】:Use spread syntax instead of for loop使用扩展语法而不是 for 循环
【发布时间】:2018-08-07 08:03:09
【问题描述】:

我想使用扩展语法减少此代码以删除 for 循环,有什么想法吗?

function shiftChar() {
  let aCharArray = prompt("Enter a word").split("");
  for (let i = 0; i < aCharArray.length; i++) {
    aCharArray[i] = String.fromCharCode(aCharArray[i].charCodeAt(0) + 1);
  }
  alert(aCharArray);
}

这行不通

function shiftChar() {
  let aCharArray = prompt("Enter a word").split("");
  aCharArray = String.fromCharCode(...aCharArray.charCodeAt(0) + 1);
  alert(aCharArray);
}

【问题讨论】:

  • 使用.map怎么样?

标签: javascript for-loop spread-syntax


【解决方案1】:

扩展语法 (it's not an operator!) 不是循环的替代品,而是apply 的替代品。

你可以的

const string = prompt("Enter a word");
const charCodes = [];
for (let i = 0; i < aCharArray.length; i++) {
    aCharCodes[i] = aString.charCodeAt(i) + 1;
}

虽然然后使用

String.fromCharCode(...charCodes)

而不是

String.fromCharCode.apply(String, charCodes)

【讨论】:

    【解决方案2】:

    对于数组中的每个元素,您都在进行一些操作,charCodeAt(0) + 1,所以最好使用map

    map 按顺序调用提供的callback 函数为数组中的每个元素调用一次,然后根据结果构造一个新数组。

    您可以使用spread syntax 来更新数组中变量aCharArray 的内容。

    扩展语法允许在零个或多个参数的地方扩展数组表达式或字符串等可迭代对象

    function shiftChar() {
      let aCharArray = prompt("Enter a word").split("").map(x => x.charCodeAt(0) + 1);
      aCharArray = String.fromCharCode(...aCharArray);
      alert(aCharArray);
    }
    

    【讨论】:

      【解决方案3】:

      不使用传播的缩小解决方案:

      function shiftChar() {
          alert(
            prompt("Enter a word").split("")
            .map(letter => String.fromCharCode(letter.charCodeAt(0) + 1));
          );
      }
      

      使用传播的(奇怪的)缩小解决方案:

      function shiftChar() {
          alert(
            [...prompt("Enter a word")].map(letter => ( 
              String.fromCharCode(letter.charCodeAt(0) + 1)
            )
          );
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-11-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-29
        • 2012-01-27
        • 2011-10-06
        相关资源
        最近更新 更多