Javascript 仅对副作用使用.map()方法合法吗?

Javascript 仅对副作用使用.map()方法合法吗?,javascript,node.js,loops,higher-order-functions,array.prototype.map,Javascript,Node.js,Loops,Higher Order Functions,Array.prototype.map,使用高阶函数(如Array.map())进行循环是否合法(或良好做法)以执行一些副作用 这主要是一个理论问题,因为我注意到有时我会使用.map()方法发现(或自己执行)一些循环,如下所示: 让myObject={…} 让myItemsArray=[…,…] myItemsArray.map((项目,索引)=>{ //为ex做一些副作用: myObject.item[索引]=项目 } 但是我知道这个map()方法实际上返回了一个数组。因此调用myItemsArray.map()就像是返回一个数组

使用高阶函数(如
Array.map()
)进行循环是否合法(或良好做法)以执行一些副作用

这主要是一个理论问题,因为我注意到有时我会使用
.map()
方法发现(或自己执行)一些循环,如下所示:

让myObject={…}
让myItemsArray=[…,…]
myItemsArray.map((项目,索引)=>{
//为ex做一些副作用:
myObject.item[索引]=项目
}
但是我知道这个
map()
方法实际上返回了一个数组。因此调用
myItemsArray.map()
就像是返回一个数组,而没有将它赋给任何变量

所以问题是,这合法吗?我应该避免使用经典的
for()
循环还是
.forEach()
方法

附带问题:我问这个问题的原因之一是因为我需要在异步函数上执行一些循环,因此涉及承诺和等待运算符,我记得
forEach()
循环在异步函数上并不理想,但我想知道为什么

所以问题是,这合法吗?我应该避免使用经典的for()循环还是使用.forEach()方法

如果您没有从map函数返回任何内容,那么您应该改用
forEach
。您最终得到的结果是相同的,但对于维护代码的任何人来说,您并不意味着您返回了有用的内容

我问这个问题的原因之一是因为我需要在异步函数上执行一些循环,所以涉及到承诺和等待运算符,我记得forEach()循环在异步函数上并不理想,但我想知道为什么

如果传递给它的函数返回一个承诺(异步async函数执行),则无论是
forEach
还是
map
都不会等待

因此,这里有三种可能的情况:

// Your loop
...myItemsArray...
// Code that comes after the loop
...etc...
答:循环中的项目需要按顺序处理

使用常规的
for()
循环,因为外部函数不会暂停

B:循环中的项目可以并行处理,后面的代码不需要等待

使用
forEach

C:后面的代码需要等待循环中的所有内容完成


使用
map
。将返回的承诺数组传递给
Promise.all
。然后
等待它。

构建一个你不需要的数组是毫无意义的,使用
forEach
。但是如果你在做异步的事情,你可能确实需要这个数组,因为这就是
Promise。所有这些都需要解决所有问题如果您不打算将任何内容映射到新的array@jonrsharpe谢谢,事实上我的代码解决了一些承诺,所以Promise.All()在我现在得到的结果中得到了结果。所以
forEach()
就像是最“易变的”方法,对吗?我不知道它是并行运行的。总是认为它就像
for()
循环一样。所以我猜不返回任何forEach()值还可以保持内存干净?如果使用map而不在变量上暗示它,返回的数组可以保留在会话的内存中?除非您
wait
执行某些操作,否则循环中的任何异步操作都将并行执行。使用
for
an
wait
将暂停整个循环。使用
forEach
它将暂停整个循环使用该特定函数,但同时循环将在其他数据上继续。“所以我猜不返回任何forEach()也会保持内存干净?”-不。