考虑以下数组:
['123', '456', '789', '000', '111', '222', '333', '444', '555']
现在,假设我想将每 3 个项目映射到一个函数。
也就是说,123
、456
、789
将映射到 function () { ... }
。
下一个 000
、111
和 222
将映射到另一个 function () { ... }
我想这样做是因为我需要对数据库执行批量请求,但我可以请求的最大 ID 数量是每批 25 个。
所以我的目标是将每 25 个项目映射到一个函数(将执行批量请求),然后使用 async.parallel
并行执行每个函数。
问题是我无法使用 map
或 async.map
因为这会映射数组上的每个项目。我打算做的是将每 25 个连续项目映射到一个对象/函数。
这可能吗?
我正在寻找任何 JavaScript 或 NodeJS 解决方案。
最佳答案
与 Node.js 不完全相关,但这里有一个可能的解决方案:
var funcs = [a, b, c, ...], // the list of functions
arr = [], // your data
items = 25,
mapOfFuncs = [];
for(var i = 0, len = arr.length, f; i < len; i++){
f = funcs[Math.floor(i / items)];
mapOfFuncs.push(f);
}
根据观察,每 24 个连续数字除以 25 并进行取整后,将产生相当于相应函数索引的某个数字。
它将产生一个数组mapOfFuncs
,其中包含与arr
的元素相对应的函数。例如,对于 arr = ['123', '456', '789', '000', '111', '222', '333', '444', '555']
和 items = 3
,输出将为:[a, a, a, b, b, b, c, c, c]
关于javascript - 将数组的多个项目映射到单个对象/函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34903360/