将数组的多个项目映射到单个对象/函数
Mapping multiple items of an array to a single object / function
考虑以下数组:
['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]
更像这样吗?
function groupBy(size, arr){
for(var i=0, out=[]; i<data.length; i+=size)
out.push( data.slice(i, i+size) )
return out;
}
var data = ['123', '456', '789', '000', '111', '222', '333', '444', '555'];
async.parallel(groupBy(3, data).map( part => processData.bind(null, part) ), callback);
//or
async.parallel(groupBy(3, data).map( part => ()=>processData(part) ), callback);
//or
async.map(groupBy(3, data), processData, callback);
> javascript 函数splice
可以在这里使用,以将每 3(或 25)个元素从原始数组中分离出来。
旁注:请注意,拼接会修改原始数组。
// this removes the first n elements out of the array and returns them
var batch= data.splice(0, length)
这是一个完整的解决方案:
var data = ['123', '456', '789', '000', '111', '222', '333', '444', '555']
, length = 3
// this function is called recursively until the whole initial array is processed (and emptied)
function splitTable() {
var batch= data.splice(0, length)
// process your batch here (map to the function you want)
console.log('batch' + batch)
if (data.length)
splitTable()
}
// initial call of the function
splitTable()
演示
相关文章:
- 如何使用javascript从JSON访问单个对象
- 将一个对象集合映射到汇总集合的单个对象
- 高级布线和单个对象定义
- 如何在返回单个对象时递归使用 Array.prototype.find()
- 使用Handlebars获取同级JSON数据,其中单个对象没有父索引键,但多个项有一个索引键
- 如何在javascript中的单个对象中推送类似的索引类型键
- NodeJS + mysql:选择返回单个对象的查询
- 在javascript(Angularjs)中将对象数组转换为单个对象
- 更改 JS 数组中的单个对象会更改所有元素
- 将数据格式从单个对象转换为键值对的对象数组
- 此函数如何能够返回单个对象
- ng-重复对象数组和单个对象
- 当您有集合时,调用接收单个对象作为参数的函数的最佳方法是什么
- 将单个对象提取为对象,而不是具有一个对象的数组,Javascript
- 在将 svg 加载到画布后获取单个对象
- 我需要使用单独类中的方法将单个对象与数组进行比较
- 检查 s3 存储桶中是否存在单个对象
- 将数组的多个项目映射到单个对象/函数
- 从 Node.js 中数组中单个对象的单个属性中获取值
- 从 NG 绑定结果访问单个对象