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;i} 您可以检查前置程序并收集范围

变量时间=[8,9,10,2,3,4,11,12,1], 范围=时间 .减速器,t,i,a=>{ 如果a[i-1]%12+1==t{ r[r.length-1][1]=t; }否则{ r、 推[t]; } 返回r; }, [] .mapa=>a.join'-' 。加入“,”;
console.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谢谢!事实上,我并不熟悉这个功能。