Javascript 嵌套forEach/等待嵌套完成
这已经被问到了很多方面,但我找不到一个推论 我有两个数组,我试图比较这两个数组之间的日期,并构建一个列表,添加一个类,并在日期匹配时更改状态。我觉得forEach不是合适的工具。这是我的。我知道在内部循环结束之前,外部循环仍在继续,但我不确定如何修复它。似乎没有async/await,就有一种简单的方法Javascript 嵌套forEach/等待嵌套完成,javascript,foreach,Javascript,Foreach,这已经被问到了很多方面,但我找不到一个推论 我有两个数组,我试图比较这两个数组之间的日期,并构建一个列表,添加一个类,并在日期匹配时更改状态。我觉得forEach不是合适的工具。这是我的。我知道在内部循环结束之前,外部循环仍在继续,但我不确定如何修复它。似乎没有async/await,就有一种简单的方法 //主事件循环 events.forEach(event=>{ 让{ 日期 }=事件; //标前事件循环 presaleEvents.forEach(presaleEvent=>{ 让{ 预售
//主事件循环
events.forEach(event=>{
让{
日期
}=事件;
//标前事件循环
presaleEvents.forEach(presaleEvent=>{
让{
预售日期
}=预售事件;
如果(预售日期===日期){
状态=‘预售事件’;
eventClass=‘预售’;
}
});
//只有3、5和6项是预售活动
让eventNode=`${status} `;
$(eventsList).append(eventNode);
});
我在发帖后几分钟(以及头撞到墙上几个小时后)就明白了这一点
我只需在父循环内重置变量,但在内部循环外重置变量
这是一张工作票
//主事件循环
events.forEach(event=>{
让{
日期
}=事件;
status='EVENT';//重置状态
eventClass='';//重置eventClass
//标前事件循环
presaleEvents.forEach(presaleEvent=>{
让{
预售日期
}=预售事件;
如果(预售日期===日期){
状态=‘预售事件’;
eventClass=‘预售’;
}
});
//只有3、5和6项是预售活动
让eventNode=`${status} `;
$(eventsList).append(eventNode);
});
那里没有发生任何异步,您不应该弄乱异步性“我知道在内部循环完成之前外部循环正在继续”,但事实并非如此。您观察到的问题是什么?预期的行为是什么?你能在这里加入一个例子来说明发生了什么吗?外部循环在内部循环之前并没有结束。问题是,一旦找到匹配项,就全局设置这两个变量。@Jhecht。。。就这样。我自己想出来了,然后删除了我的问题,但我想我应该把它留给别人。很高兴你收到了。望远镜很奇怪。您不只是在事件对象上设置值的原因是什么?
// main event loop
events.forEach(event => {
let {
date
} = event;
// presaleEvent loop
presaleEvents.forEach(presaleEvent => {
let {
presaleDate
} = presaleEvent;
if (presaleDate === date) {
status = 'PRESALE EVENT';
eventClass = 'presale';
}
});
// only 3, 5 & 6 should be presale events
let eventNode = `<li class="event ${eventClass}">${status}</li>`;
$(eventsList).append(eventNode);
});
// main event loop
events.forEach(event => {
let {
date
} = event;
status='EVENT'; // reset the status
eventClass=''; // reset the eventClass
// presaleEvent loop
presaleEvents.forEach(presaleEvent => {
let {
presaleDate
} = presaleEvent;
if (presaleDate === date) {
status = 'PRESALE EVENT';
eventClass = 'presale';
}
});
// only 3, 5 & 6 should be presale events
let eventNode = `<li class="event ${eventClass}">${status}</li>`;
$(eventsList).append(eventNode);
});