интервал времени вывода JavaScript - PullRequest
0 голосов
/ 19 февраля 2019

Я работаю над автоматизацией листа Google для календаря Google, но я застрял.

У меня есть массив строк, которые соответствуют часам

ex: time = [8, 9, 10, 2, 3, 4]

и хочувывод строки

ex: range = "8-11, 2-5"

Мне нужно написать это в скрипте приложения Google, какие-либо предложения?

Я новичок в скрипте приложения Google, и мне сложно написать эту функцию.Первоначально я пытался преобразовать массив строк в целые числа военного времени и создать два цикла 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);
}

Ответы [ 3 ]

0 голосов
/ 19 февраля 2019

Это то, что вы ищете?

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])
);
0 голосов
/ 19 февраля 2019

Можно сохранить начало каждого диапазона, затем выполнять итерацию до тех пор, пока текущее значение не будет соответствовать предыдущему, затем взять предыдущее и начало для создания диапазона, собрать их в массив, и все.

 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(", "));
0 голосов
/ 19 февраля 2019

Вы можете проверить предшественника и собрать диапазоны.

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...