【发布时间】:2021-03-24 22:35:59
【问题描述】:
是否合法(或良好做法)使用更高阶函数(如 Array.map())执行循环以执行一些副作用?
这主要是一个理论问题,因为我注意到有时我使用.map() 方法发现(或自己执行)一些循环,如下所示:
let myObject = {...}
let myItemsArray = [ ... , ... ]
myItemsArray.map( (item, index) => {
// do some side effect for ex:
myObject.item[index] = item
}
但我知道这个map() 方法实际上返回了一个数组。所以调用myItemsArray.map() 就像我返回一个数组而不将它分配给任何变量。
那么问题来了,这合法吗?我应该避免这种情况并使用经典的for() 循环还是.forEach() 方法?
附带问题:我问这个的原因之一是因为我需要在异步函数上执行一些循环,因此涉及到 promise 和 await 运算符,我记得 forEach() 循环是在异步函数上并不理想,但想知道原因。
【问题讨论】:
-
构建一个不需要的数组是没有意义的,改用
forEach。但是,如果您正在执行异步操作,那么您可能确实需要该数组,因为这是Promise.all用来解决所有承诺的原因。 -
如果您不打算将任何内容实际映射到新数组,则应该使用
forEach -
@jonrsharpe 谢谢,确实我的代码解决了一些承诺,所以 Promise.All() 最终得到结果
标签: javascript node.js loops higher-order-functions array.prototype.map