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
anwait
将暂停整个循环。使用forEach
它将暂停整个循环使用该特定函数,但同时循环将在其他数据上继续。“所以我猜不返回任何forEach()也会保持内存干净?”-不。