javascript输出时间间隔
我正在努力将谷歌工作表自动转换为谷歌日历,但我被卡住了 我有一个对应于小时的字符串数组javascript输出时间间隔,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,我正在努力将谷歌工作表自动转换为谷歌日历,但我被卡住了 我有一个对应于小时的字符串数组 ex: time = [8, 9, 10, 2, 3, 4] 并希望输出一个字符串 ex: range = "8-11, 2-5" 我需要在谷歌应用程序脚本中写这个,有什么建议吗 我是谷歌应用程序脚本的新手,很难编写这个函数。我最初的过程是将字符串数组转换为军用时间整数,并创建两个for循环,但我相信有一种更有效的方法可以做到这一点 谢谢你的帮助 这是我当前的代码: 变量时间=[8,9,10,2,3,4
ex: time = [8, 9, 10, 2, 3, 4]
并希望输出一个字符串
ex: range = "8-11, 2-5"
我需要在谷歌应用程序脚本中写这个,有什么建议吗
我是谷歌应用程序脚本的新手,很难编写这个函数。我最初的过程是将字符串数组转换为军用时间整数,并创建两个for循环,但我相信有一种更有效的方法可以做到这一点
谢谢你的帮助
这是我当前的代码:
变量时间=[8,9,10,2,3,4]
//如果currentTime==13{currentTime-=12;}
函数时间范围单元格输入,小时列表{
var start=parseInthourList[0];
对于变量i=1;iconsole.logrange 这就是你要找的吗 常数timeToRange=arr=>{ const mins=arr .filterx,i,arr=>x!==arr[i-1]+1; 常数maxs=arr .filterx,i,arr=>x!==arr[i+1]-1 .mapx=>x+1; 返回分钟 .mapx,i=>[x,maxs[i]]。加入“-” 。加入“,”; }; console.log 时间范围[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(", "));
分享你的研究成果对每个人都有帮助。告诉我们您尝试了什么,以及为什么它不能满足您的需求。这表明你花了时间来帮助自己,它使我们避免重复显而易见的答案,最重要的是,它帮助你得到一个更具体和相关的答案!另请参见:分解您的问题。首先遍历数组以生成序列,然后将这些序列转换为各自的基于字符串的表示形式。如果你想要10,11而不是10-11,那么用这种方式处理2元素范围会更容易。Map或reduce将是这里研究的有趣方法我为你创建了一个片段。请更新它,使其返回一个您可以控制台的值。登录一个come-on,这是非常自我解释的;谢谢你的意见!你能解释一下r、t、i和a值代表什么吗?r是累加器,是临时结果,t是时间值,i是实际元素的索引,a是实际迭代的数组。@mplungjan谢谢!事实上,我并不熟悉这个功能。