【问题标题】:Reduce JavaScript iteration减少 JavaScript 迭代
【发布时间】:2018-12-14 01:41:02
【问题描述】:

现在我正在使用 javascript 开发时间线程序。当我点击每个班级时,它应该被着色为带有 2 个块的时间线,因为每个班级都是 2 小时的班级。

每个时间表都有 id(例如,星期一第一堂课有 ="mon1",星期五第二堂课有 'fri2'

这是我的代码。它运作良好。但我想知道如何减少代码。

let timelineColor = getRamdomColor();
let clickDay;
let clickDay1;

for (i = 0; i < dayArray.length; i++) {
    if (dayArray[i] === 'monday') {
        clickDay = 'mon' + timeArray[i];
        let table = document.getElementById(clickDay);
        table.style.backgroundColor = timelineColor;
        clickDay1 = 'mon' + (Number(timeArray[i]) + 1);
        console.log(clickDay1);
        let table1 = document.getElementById(clickDay1);
        table1.style.backgroundColor = timelineColor;
    } else if (dayArray[i] === 'tuesday') {
        clickDay = 'tue' + timeArray[i];
        let table = document.getElementById(clickDay);
        table.style.backgroundColor = timelineColor;
        clickDay1 = 'tue' + (Number(timeArray[i]) + 1);
        let table1 = document.getElementById(clickDay1);
        table1.style.backgroundColor = timelineColor;
    } else if (dayArray[i] === 'wednesday') {
        clickDay = 'wed' + timeArray[i];
        let table = document.getElementById(clickDay);
        table.style.backgroundColor = timelineColor;
        clickDay1 = 'wed' + (Number(timeArray[i]) + 1);
        let table1 = document.getElementById(clickDay1);
        table1.style.backgroundColor = timelineColor;
    } else if (dayArray[i] === 'thursday') {
        clickDay = 'tur' + timeArray[i];
        let table = document.getElementById(clickDay);
        table.style.backgroundColor = timelineColor;
        clickDay1 = 'tur' + (Number(timeArray[i]) + 1);
        let table1 = document.getElementById(clickDay1);
        table1.style.backgroundColor = timelineColor;
    } else if (dayArray[i] === 'friday') {
        clickDay = 'fri' + timeArray[i];
        let table = document.getElementById(clickDay);
        table.style.backgroundColor = timelineColor;
        clickDay1 = 'fri' + (Number(timeArray[i]) + 1);
        let table1 = document.getElementById(clickDay1);
        table1.style.backgroundColor = timelineColor;
    }
}

【问题讨论】:

  • 你能提供你的html吗?这将使我对大局有更好的了解。一定的改进是从 if 块切换到 switch 语句。虽然您可以将两个表放在一个数组中 const tables = [document.getElementById('fri' + timeArray[i]), document.getElementById('fri' + (Number(timeArray[i]) + 1))]; 然后更改颜色 tables[0].style.backgroundColor = timelineColor; tables[1].style.backgroundColor = timelineColor;

标签: javascript loops iterator


【解决方案1】:

您根本不需要if-statements。设置一张将您的全天名称与短天名称相关联的地图,然后进行查找:

let timelineColor = getRamdomColor();
let clickDay;
let clickDay1;

var dayMap = {
    'monday'   : 'mon',
    'tuesday'  : 'tue',
    'wednesday': 'wed',
    'thursday' : 'tur',
    'friday'   : 'fri'
};

for (var i = 0; i < dayArray.length; i++) {
    let shortDayName = dayMap[dayArray[i]];
    clickDay = shortDayName + timeArray[i];
    let table = document.getElementById(clickDay);
    table.style.backgroundColor = timelineColor;
    clickDay1 = shortDayName + (Number(timeArray[i]) + 1);
    console.log(clickDay1);
    let table1 = document.getElementById(clickDay1);
    table1.style.backgroundColor = timelineColor;
}

【讨论】:

    【解决方案2】:

    您可以使用switch 语句而不是多个if-elseif 语句:

    let timelineColor = getRamdomColor();
    
    for (i = 0; i < dayArray.length; i++){
      let day;
    
      switch (dayArray[i]){
        case 'monday': day = 'mon'; break;
        case 'tuesday': day = 'tue'; break;
        case 'wednesday': day = 'wed'; break;
        case 'thursday': day = 'tur'; break;
        case 'friday': day = 'fri'; break;
      }
    
      // I moved these variables into the loop too
      let clickDay = day + timeArray[i];
      let clickDay1 = day + (Number(timeArray[i]) + 1);
    
      let table = document.getElementById(clickDay);
      let table1 = document.getElementById(clickDay1);
    
      table.style.backgroundColor = timelineColor;
      table1.style.backgroundColor = timelineColor;
    }
    

    【讨论】:

      猜你喜欢
      • 2019-02-14
      • 2017-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多