2017-04-21 29 views
0

大家好,對於Javascript和Angular2來說都很新穎。我正在處理需要基於從後端傳遞的配置的時序數組的項目。基本配置包括以下內容:從配置創建一個時間陣列

export const TIMEDATA: any = { 
    start_time: "9", 
    end_time: "16", 
    interval: "30" 
} 

有了這個配置,我怎麼能想出一個數組類似

Array = ["9:00", "9:30", "10:00", ...., "16:00"] 

任何見解傢伙?提前致謝。

+0

你們是不是要構建TIMEDATA對象的數組? – Kilmazing

回答

0

您可以嘗試使用一個循環來計算時間間隔:

const leftpad = (str, padString, length) => { 
 
    var s = str.toString(); 
 
    while (s.length < length) 
 
     s = padString + s; 
 
    return s; 
 
} 
 

 
let timedata = { 
 
    start_time: "9", 
 
    end_time: "16", 
 
    interval: "30" 
 
} 
 

 
let start_time = +timedata.start_time * 60; 
 
let end_time = +timedata.end_time * 60; 
 
let interval = +timedata.interval; 
 
let times = []; 
 

 
for (var i = start_time; i <= end_time; i += interval) { 
 
    let h = Math.floor(i/60); 
 
    let m = i % 60; 
 
    
 
    let time = [h, leftpad(m, '0', 2)].join(':'); 
 
    times.push(time); 
 
} 
 

 
console.log(times);

這是一個使用lodash的解決方案。要在項目中快速使用lodash,請在html頁面中包含腳本標記,然後在使用它的文件中包含declare _

let timedata = { 
 
    start_time: "9", 
 
    end_time: "16", 
 
    interval: "30" 
 
} 
 

 
let start_time = +timedata.start_time * 60; 
 
let end_time = +timedata.end_time * 60; 
 
let interval = +timedata.interval; 
 

 
let times = _ 
 
    .range(start_time, end_time + interval, interval) 
 
    .map((time) => [ 
 
     _.floor(time/60), 
 
     _.padStart(time % 60, 2, '0') 
 
    ].join(':')); 
 

 
console.log(times);
<script src="https://cdn.jsdelivr.net/lodash/4/lodash.min.js"></script>