使用扩展语法而不是 for 循环

Posted

技术标签:

【中文标题】使用扩展语法而不是 for 循环【英文标题】:Use spread syntax instead of for loop 【发布时间】: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怎么样? 【参考方案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)
      )
    );

【讨论】:

以上是关于使用扩展语法而不是 for 循环的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server中for循环的语法

在 FOR 循环批处理语法中使用变量进行字符串替换

如何在数据数组和对象的合并中使用对象分配而不是扩展语法?

Objective-C语法总结

for循环语法及for循环脚本例子

从python中的for循环返回值