javascript - 嵌套的异步 ForEach 循环
问题描述
我有两个嵌套的 forEach 循环,我尝试使用标准 forEach 和一些自己的逻辑但它失败了,然后我尝试了来自 npm 的异步库,代码如下:
function addValue(data, callback){
var final_data = [];
data.forEach(element => {
final_data.push(element);
});
var values =
[[1,0],
[2,0],
[3,0],
[-1,0],
[-2,0],
[-3,0],
[1,1],
[2,1],
[3,1],
[-1,1],
[-2,1],
[-3,1]];
async_.forEachOf(final_data, (item, {}, callback1) => {
values.forEach(value=>{
var obj = Object.assign({},item);
obj.x+=value[0];
obj.y+=value[1];
final_data.push(obj);
});
callback1();
}, err => {
if (err) console.error(err.message);
// Here i get different values for separate executions with same data
console.log(final_data.length)
});
}
我想要实现的是 final_data 是一个对象数组,第一个 forEachOf 循环应该遍历 final_data 对象,并且每个循环都应该运行第二个嵌套的 forEach 创建一个具有修改值的新对象并将其推回 final_data对象数组。我遇到的问题是函数总是在不同的时间返回,因此 final_data 的长度总是不同的,一旦 100 个对象被推送,一次 670。所以基本上应该调用主函数中的回调,即 addValue所有对象都被处理,两个 for 循环完成......
使用非异步代码最终陷入无限循环,奇怪
function addValue(data, callback){
var final_data = [];
data.forEach(element => {
final_data.push(element);
});
var values =
[[1,0],
[2,0],
[3,0],
[-1,0],
[-2,0],
[-3,0],
[1,1],
[2,1],
[3,1],
[-1,1],
[-2,1],
[-3,1]];
for(var i=0; i<final_data.length; i++){
for(var j=0; j<values.length; j++){
var obj = Object.assign({},final_data[i]);
obj.x+=values[j][0];
obj.y+=values[j][1];
final_data.push(obj);
console.log(final_data.length)
}
}
}
编辑 2: 使用没有异步的 forEach 工作......与 forEach 相比,无限标准循环的原因可能是什么?
解决方案
假设你有 es6 支持,你可以试试这个
function addValue (data) {
var values =
[[1,0],
[2,0],
[3,0],
[-1,0],
[-2,0],
[-3,0],
[1,1],
[2,1],
[3,1],
[-1,1],
[-2,1],
[-3,1]];
var finalData = data.map((item)=>{
return values.map(function(value) {
var obj = Object.assign({},item);
obj.x+=value[0];
obj.y+=value[1];
return obj;
})
});
return finalData.flat(2);
}
推荐阅读
- scala - 在 Scala 中为案例类创建伴随对象时遇到问题
- android - 如何使`this`在一个范围内引用 Kotlin Android Extension 类型类?
- android - 我使用了 distributionUrl =https\://services.gradle.org/distributions/gradle-6.1.1-all.zip 但同步后布局文件仍然丢失
- git - 将 git hub 存储库更改为主文件夹(iso 子文件夹)
- mysql - 语法不正确的 SQL 不会在 MariaDB 服务器版本中引发错误:10.1.45?
- javascript - [Vue 警告]:beforeCreate 钩子中的错误:“ReferenceError:文档未定义”
- c# - 将带有 IO 操作的无限循环转换为可观察的
- redux - 在 redux-thunk 操作后使用 axios 进行承诺
- reactjs - 需要说明:使用 useEffect 钩子从 API 获取数据并获取名称
- angular - 如何使用来自服务的值进行角度的@Hostbinding?