使用扩展语法而不是 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 循环的主要内容,如果未能解决你的问题,请参考以下文章