اذهب إلى المحتوى

السؤال

نشر

أحاول العثور على أيام الأسبوع بين التاريخ الأول والتاريخ الثاني. في المصفوفة التي تحتوي على تواريخ أيام الأسبوع ، تحصل القيم على زيادة بعد تنفيذ  السطر 1 في الكود التالي

private getListOfWeekDaysBetweenTwoDates(
    startDate: Date,
    endDate: Date
  ): Date[] {
    const weekdaysList = [];
    let tempDate = this.addDaystoGivenDate(startDate, 1);
    while (tempDate < endDate) {
      if (this.isWeekDay(tempDate)) {
        weekdaysList.push(tempDate);
      }
//السطر 1
      tempDate = this.addDaystoGivenDate(tempDate, 1);
    }
    return weekdaysList;
  }

 private addDaystoGivenDate(date: Date, numberOfDays: number): Date {
    return new Date(date.setUTCDate(date.getUTCDate() + numberOfDays));
  }

private isWeekDay(day: Date): boolean {
    if (day.getUTCDay() >= 1 && day.getUTCDay() <= 5) {
      return true;
    }
    return false;
  }

كيف يمكنني إيقاف تغيير قيم المصفوفة؟

Recommended Posts

  • 0
نشر

يتم تغيير قيم المصفوفة weekdaysList في هذا الكود بسبب دالة this.addDaystoGivenDate() التي تعيد نفس الكائن Date الذي تم إرساله كمعامل لها، وتقوم بتحديث قيمتها في المكان نفسه. لحل هذه المشكلة ومنع تغيير قيم الصفيف، يجب إنشاء كائن Date جديد بنفس القيمة كلما تم استخدام دالة this.addDaystoGivenDate(). لذلك، يمكن تعديل الكود كما يلي:

private getListOfWeekDaysBetweenTwoDates(
  startDate: Date,
  endDate: Date
): Date[] {
  const weekdaysList = [];
  let tempDate = new Date(startDate.getTime());
  tempDate.setDate(tempDate.getDate() + 1);
  while (tempDate < endDate) {
    if (this.isWeekDay(tempDate)) {
      weekdaysList.push(new Date(tempDate.getTime()));
    }
    tempDate.setDate(tempDate.getDate() + 1);
  }
  return weekdaysList;
}

وبذلك يتم إنشاء كائن Date جديد في كل مرة يتم استخدام فيها this.addDaystoGivenDate() أو إضافة يوم واحد عبر tempDate.setDate(tempDate.getDate() + 1)، بدلاً من تحديث نفس الكائن Date كما كان يحدث في الكود الأصلي.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...