如何禁用使用手表循环遍历数组的可用时间?

Posted

技术标签:

【中文标题】如何禁用使用手表循环遍历数组的可用时间?【英文标题】:How to disable available times looping through an array using watch? 【发布时间】:2019-10-01 14:40:06 【问题描述】:

我正在 Vue CLI 中创建一个预订应用程序。我决定使用 vue-ctk-date-time-picker 来选择日期和时间。我计划根据日期禁用某些时间,但我遇到了问题。我的代码只禁用数组中指定的最后日期的时间并忽略其余时间。

我已根据日期将时间数组记录到控制台并打印正确的值。除了那个控制台没有显示任何错误。

<VueCtkDateTimePicker only-date v-model="date"/>
<VueCtkDateTimePicker only-time :disabled-hours="disabledHours"/>
date: null,
disabledHours: [],
testArray: [
  
    date: "2019-05-28",
    times: ["10", "11"]
  ,
  
    date: "2019-05-29",
    times: ["10", "11", "12"]
  
]

watch: 
  date(newVal, oldVal) 
    for (let i = 0; i < this.testArray.length; i++) 
      if (newVal == this.testArray[i].date) 
        for (let j = 0; j < this.testArray[i].times.length; j++) 
          this.disabledHours.push(this.testArray[i].times[j]);
        
       else 
        this.defaultHours();
      
    
  
,
created() 
  this.defaultHours();


defaultHours() 
  this.disabledHours = ["00","01","02","03"]

如果日期是"2019-05-28",那么我预计禁用时间为 10 和 11。 如果日期是"2019-05-29",那么我预计禁用时间为 10、11 和 12 等。

但是发生的情况是,它采用数组中指定的最后一个日期,并且只禁用它的小时数。

【问题讨论】:

【参考方案1】:

您发布的代码将始终循环遍历testArray 中的所有条目,并对每个条目执行一些操作。我认为你想要的行为是让代码只对匹配的条目采取行动,如果没有条目匹配则默认。有很多方法可以实现这种行为,但一种方法如下

date(newValue) 
    const matched = testArray.find(entry => entry.date === newValue);
    if (matched) 
        this.disabledHours = matched.times;
     else 
        this.defaultHours();
    

【讨论】:

谢谢您的好心先生!像魅力一样工作,看起来也很干净

以上是关于如何禁用使用手表循环遍历数组的可用时间?的主要内容,如果未能解决你的问题,请参考以下文章

如何循环遍历数组

如何使用 PHP 循环遍历 JSON 数组

如何在单击多个项目时使用 jQuery 循环遍历数组?

如何使用 React JS 循环遍历 MongoDB 数组以呈现表?

循环遍历 JSON 数组

如何在角度 2 中使用 ngFor 仅循环遍历数组到某些对象