forEach函数中的while循环[重复]
Posted
技术标签:
【中文标题】forEach函数中的while循环[重复]【英文标题】:While loop in a forEach function [duplicate] 【发布时间】:2021-08-10 09:50:51 【问题描述】:在 forEach 函数中循环数组项时,我在 js 中遇到了问题。
我只是有一个 ID 数组,其中一些 ID 的字符少于 10 个,我想在开头用“0”填充。
例子:
myArray = ["1234567890", "0123456789", "12345678"]
在这种情况下,我想用"0" --> "0012345678"
填写最后一项。
当然,它也可以通过其他各种方式实现,但我就是不明白为什么它不起作用。
这是我的代码:
myArray.forEach(Id =>
while(Id.length < 10)
Id= "0" + Id;
)
【问题讨论】:
你到底想达到什么目标? 究竟是什么“不起作用”...? 【参考方案1】:当您执行Id= "0" + Id;
时,您只是在更新参数 值。完成后,该参数值不会保存在任何地方。
如果你想更新数组中的值,要么分配回现有数组,要么(更常见)通过map
创建一个新数组:
myArray = myArray.map(Id =>
while (Id.length < 10)
Id = "0" + Id;
return Id;
);
或者现在,您可以使用 padStart
代替 while
循环:
myArray = myArray.map(Id => Id.padStart(10, "0"));
这是一个分配回原始数组的示例,以防您想这样做:
myArray.forEach((Id, index) => myArray[index] = Id.padStart(10, "0"));
活生生的例子:
// Creating a new array (1)
let myArray1 = ["1234567890", "0123456789", "12345678"];
myArray1 = myArray1.map(Id =>
while (Id.length < 10)
Id = "0" + Id;
return Id;
);
console.log(myArray1);
// Creating a new array (2)
let myArray2 = ["1234567890", "0123456789", "12345678"];
myArray2 = myArray2.map(Id => Id.padStart(10, "0"));
console.log(myArray2);
// Updating the existing array
let myArray3 = ["1234567890", "0123456789", "12345678"];
myArray3.forEach((Id, index) => myArray3[index] = Id.padStart(10, "0"));
console.log(myArray3);
【讨论】:
感谢您更快的回答,现在可以使用了!顺便提一句。在您的第二个示例中使用 padStart 函数我不需要返回值的原因是什么? @itsmeMarc - 这是一个简洁的箭头函数(=>
之后没有
)。主体完全由单个表达式组成,该表达式的结果是函数的返回值。更多 here 和 here(以及我最近一本书的第 3 章——如果你有兴趣,可以在我的个人资料中链接)。【参考方案2】:
如果您想使用 forEach,您还必须获取数组并更改其内容。
myArray.forEach((Id, index, arr) =>
while(Id.length < 10)
Id = "0" + Id;
arr[index] = Id;
);
【讨论】:
@decpk 感谢您的编辑,但您错了。 arg[index] = Id 可以在 while 循环之外 我只是格式化了你的代码,没有添加任何东西 @decpk 好的,谢谢。早上太早了;)以上是关于forEach函数中的while循环[重复]的主要内容,如果未能解决你的问题,请参考以下文章
在 foreach 循环中的 if 语句中的 while 循环...无法正常工作