Найти значения в массиве в зависимости от шаблона в Javascript - PullRequest
0 голосов
/ 24 мая 2018

У меня есть массив:

var videoSources = ["0000.mp4", "0015.mp4", "0030.mp4", "0045.mp4", "0100.mp4"];

Я бы проигрывал видео на основе текущего времени;mp4 записываются каждые 15 минут;

if time = 0044 play 0030.mp4

Так что мне нужно что-то вроде паттерна [0-15], чтобы найти и воспроизвести правильное видео.Здесь функция для воспроизведения видео на данный момент:

var currentIndex = 0;
// listener function changes src
function myNewSrc() {
    var myVideo = document.getElementsByTagName('video')[0];
    myVideo.src = videoSources[currentIndex];
    myVideo.load();
}

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

Вы можете отобразить ваш массив времени и время на числа, а затем использовать метод findIndex для возврата индекса правильного элемента времени из массива.

var videoSources = ["0000.mp4", "0015.mp4", "0030.mp4", "0045.mp4", "0100.mp4"]

const getIndex = (arr, time) => {
  time = parseInt(time);
  arr = arr.map(e => parseInt(e.split('.')[0]));
  return arr.findIndex((e, i) => time >= e && !arr[i + 1] || time < arr[i + 1]);
}

console.log(getIndex(videoSources, "0044"))
console.log(getIndex(videoSources, "0015"))
console.log(getIndex(videoSources, "0099"))
console.log(getIndex(videoSources, "0120"))
0 голосов
/ 24 мая 2018

Я бы посоветовал разобрать имя файла в целое число и затем найти, находится ли минутная отметка в пределах диапазона файла:

var videoSources = 
  ["0000.mp4", 
  "0015.mp4", 
  "0030.mp4", 
  "0045.mp4", 
  "0100.mp4"]

var getTimestamp = (ts, sources) =>
  sources.find(name => {
    const startStr = name.split(".")[0];      // e.g.: "0015"
    const startMin = parseInt(startStr, 10);  // e.g.: 15
    const endMin = startMin + 15;
    
    return ts >= startMin && ts < endMin; 
  });

console.log(getTimestamp(44, videoSources));

Если диапазоны не гарантируются равными 15 минутам, вы можете сделать «просмотр вперед», чтобы найти end диапазона.В моем текущем примере я жестко запрограммировал его на 15 минут и ожидаю, что имя файла будет start файла.

Edit: для поддержки часов и минут

var videoSources = 
  ["0000.mp4", 
  "0015.mp4", 
  "0030.mp4", 
  "0045.mp4", 
  "0100.mp4",
  "1145.mp4",
  "1230.mp4",
  "1245.mp4"]

var getTimestamp = (h, m, sources) =>
  sources
    .sort()
    .find(name => {
      const hours = parseInt(name.slice(0, 2), 10);
      const minutesStart = parseInt(name.slice(2, 4), 10);
      const minutesEnd = minutesStart + 15;
      
      return h <= hours && m >= minutesStart && m < minutesEnd; 
    });

console.log(getTimestamp(12, 44, videoSources));
...