首页 > 解决方案 > for循环在打字稿javascript中不起作用

问题描述

我有一个对象数组,其中包含从和到这样的时间

[{from:2.3,to:4.5},{from:4.5,to:6}]

现在我试图循环这个来检查我的从值这里的问题它只得到第一个我用 JavaScript 尝试过的项目它工作正常但是当我使用打字稿时它没有按预期工作它只是继续返回第一个我的数组上的元素并停止所以可能是什么问题

const freeSchedule = await ConsultFreeTime.findOne({consultantId:"123"})
            .then(schedule=>{
               
                schedule.week[day].sort((a:any,b:any ) => a.from - b.from);
                let week = schedule.week;
                if (week[day]) {
                    let timesRange = week[day];                       
                    let checkData = [];

                    // get number of sessions
                    let sessionsNumber = range / 15 - 1;
                    let back=0;
                    
                 // the problem is on that loop
                   for (let i = 0; i < timesRange.length; i++){
                       if (timesRange[i].from === startTime.from){
                            startTime = timesRange[i];
                            back = i;
                           
                        if (startTime.busy.includes(date) && appointmentCheck) {
                            return {
                                success: false,
                                error: " يوجد موعد في هذا الوقت "
                            }
                        }
                        console.log('11111',timesRange[i + sessionsNumber + 1])
                        if (timesRange[i+ sessionsNumber + 1]) {
                            // this will hold the rest time after patient duration end
                            let newUpdate = timesRange[i + sessionsNumber + 1];
                            // send the total time to the admin panal
                            updatedTime = {
                              from: startTime.from,
                              to: newUpdate.to,
                            };
                          console.log('updatedTime',updatedTime)

                            rangeHolder.push({from:newUpdate.from,to:newUpdate.to})
                            newUpdate.busy.push(date);
                            checkData.push(newUpdate.from);
                          }
                          break;

                       }else {
                            return  {
                                success: false,
                                error: "هذا الوقت غير موجود "
                            }
                            }
                   }
                   while (sessionsNumber > 0) {
                    if (!checkData.includes(startTime.from)) {
                        startTime.busy.push(date);
                        checkData.push(startTime.from);
                        rangeHolder.push({from:startTime.from,to:startTime.to})
                      }
                      back += 1;
                      if (!timesRange[back]) {
                        return  {
                            success: false,
                            error: "خطأ في تحديد مدة الجلسة  "
                        }
                      }
                      if (timesRange[back].busy.includes(date) && appointmentCheck) {
                        return  {
                            success: false,
                            error: "يوجد حجز في هذا الوقت  "
                        }
                      }
                      if (!checkData.includes(timesRange[back].from)) {
                        let restDate = timesRange[back];
                        restDate.busy.push(date);
                        checkData.push(restDate.from);
                        rangeHolder.push({from:restDate.from,to:restDate.to})
                      }
                      sessionsNumber--;
                   }
                }
                console.log('schedule.week',schedule.week)
                return schedule.week;

            }).catch((err) => console.log(err));

标签: javascriptarraystypescriptfor-loop

解决方案


return将始终停止循环的执行。看看这个答案:https ://stackoverflow.com/a/11714515/4716214 也许你想forEach改用。


推荐阅读