[英]javascript output time interval
我正在努力將谷歌工作表自動化到谷歌日歷,但我被卡住了。
我有一個對應於小時的字符串數組
ex: time = [8, 9, 10, 2, 3, 4]
並想輸出一個字符串
ex: range = "8-11, 2-5"
我需要用谷歌應用程序腳本編寫這個,有什么建議嗎?
我是谷歌應用程序腳本的新手,很難編寫函數。 我最初的過程是將字符串數組轉換為軍事時間整數,並創建兩個 for 循環,但我確信有更有效的方法來做到這一點。
謝謝您的幫助!
這是我當前的代碼:
var time = [8, 9, 10, 2, 3, 4] // if (currentTime == 13) {currentTime -= 12;} function timeRange(cellInput, hourList) { var start = parseInt(hourList[0]); for (var i = 1; i < hourList.length; ++i) { if (hourList[i] == start + i) { var end = parseInt(hourList[i]); } else { cellInput.setValue(start + " - " + (end + 1)); } } } function soloTime(cellInput, hour) { //convert hour string to hour var hour = parseInt(hour) var start = hour var end = hour + 1 cellInput.setValue(start + "-" + end); }
您可以檢查前身並收集范圍。
var time = [8, 9, 10, 2, 3, 4, 11, 12, 1], range = time .reduce((r, t, i, a) => { if (a[i - 1] % 12 + 1 === t) { r[r.length - 1][1] = t; } else { r.push([t]); } return r; }, []) .map(a => a.join('-')) .join(', '); console.log(range);
這是你想要的?
const timeToRange = (arr) => { const mins = arr .filter((x, i, arr) => x !== arr[i - 1] + 1); const maxs = arr .filter((x, i, arr) => x !== arr[i + 1] - 1) .map(x => x + 1); return mins .map((x, i) => [x, maxs[i]].join('-')) .join(', '); }; console.log( timeToRange([8, 9, 10, 2, 3, 4]) );
您可以保留每個范圍的開始,然后迭代直到當前值不適合前一個值,然后使用前一個和開始創建一個范圍,將它們收集在一個數組中,就是這樣。
const result = [];
let start = time[0];
let previous = time[0];
// Start at the second position, and go over the arrays length by one, so tgat the last range gets added too
for(const value of time.slice(1).concat(Infinity)) {
// if the range isn't continuous (12 to 1 is continuous)
if((value - previous) % 12 !== 1) {
// Add the previous range, start the new range here
result.push(start + "-" + previous);
start = value;
}
previous = value;
}
console.log(result.join(", "));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.