簡體   English   中英

在布爾TypeScript / JavaScript方法中返回true / false的正確方法?

[英]Right way to return true/false in boolean TypeScript/JavaScript method?

我正在嘗試禁用用戶已預訂活動的所有日期。 我正在使用https://www.npmjs.com/package/ng-pick-datetime TypeScript和Angular6。我對Java較為滿意,但可以自己學習一些Javascript。

.TS

    getUserEvents() {
    this._calendarService.getAllEvent().subscribe(res => {
      this.allEvents = res.json();
    });
  }

  filterForbiddenDays() {
    this.allEvents.forEach(d => {
      let day = {
        'start': new Date(d.startDate.value),
        'end': new Date(d.endDate.value)
      };
      this.forbiddenDays.push(day);
    });
  }

  public myFilter = (d: Date): boolean => {
    //return this.forbiddenDays[0].start.getDate() !== d.getDate() && this.forbiddenDays[1].start.getDate() !== d.getDate() // <-- THIS WORKS GREAT
    this.forbiddenDays.filter(data => {
      return data.start.getDate() !== d.getDate() // <-- TRUE SHOULD CHANGE COLOR ON DAY IN CALENDAR
    });
    return false;
  }

如果我映射了forbiddenDays數組而不是forEach,我會看到我對forbiddenDays中的每個事件都是正確的,這應該更改日歷中這些日期的顏色。

但是現在myFilter方法導致以下結果: 日歷圖片

我究竟做錯了什么? 我覺得問題出在myFilter方法中。

.HTML

    <div class="example-wrapper datePicker">
        <label class="example-input-wrapper" id="eventInputSuccess">
            <input (click)="filterForbiddenDays()" id="eventInputError" placeholder="Click to choose date"
                (dateTimeInput)="basic.openModal()" [(ngModel)]="dateTimeInput" [owlDateTimeTrigger]="dt"
                [owlDateTimeFilter]="myFilter" [owlDateTime]="dt"><i class="fa fa-calendar" aria-hidden="true"></i>
            <owl-date-time #dt [pickerMode]="'dialog'"></owl-date-time>
        </label>
    </div>
</div>

提前致謝!

編輯:

return this.forbiddenDays[0].start.getDate() !== d.getDate();

結果: 預期結果,但在我的陣列中整天

因此,基本上,當我指定[0]或[3]等索引時,它的效果很好,但是我不確定為什么它不適用於forEach()或filter()

您的函數myFilter始終返回false

this.forbiddenDays.forEach()內部的return僅打破當前的迭代,而不會導致函數停止。 你必須使用someevery來代替:

public myFilter = (d: Date): boolean => {
    return this.forbiddenDays.every(data => {
        return data.start.getDate() !== d.getDate() // <-- TRUE SHOULD CHANGE COLOR ON DAY IN CALENDAR
    });
}

僅當數組中的所有元素都滿足data.start.getDate() !== d.getDate() ,此方法才返回true否則返回false

您的myFilter函數始終返回false。 forEachfilter回調中的返回將返回myFilter函數。 它只是返回您傳遞給它的回調,在這種情況下,這毫無意義。

我認為您想要的是這樣的:

public myFilter = (d: Date): boolean => {
  return this.forbiddenDays.every(forbiddenDay => {
    return forbiddenDay.start.getDate() !== d.getDate();
  });
}

如果回調針對任何數組元素返回falsearray.every()方法將返回false

您也可以使用for..of循環編寫此for..of

public myFilter = (d: Date): boolean => {
  for (let forbiddenDay of this.forbiddenDays) {
    if (forbiddenDay.start.getDate() !== d.getDate()) {
      return true;
    }
  }
  return false;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM