Что не так с этим JavaScript foreach l oop? - PullRequest
0 голосов
/ 24 января 2020
var videos = {
    a: Popcorn("#a"),
    b: Popcorn("#b"),
    c: Popcorn("#c")
}

videos.forEach(function(vid){
    if (vid.media.readyState === 4) {
    vid.currentTime(
      videos.a.currentTime()
    );
  }
}); 

Для некоторого контекста я пытаюсь увеличить масштаб этого JSFiddle: Синхронизация воспроизведения двух видео , чтобы я мог воспроизводить любое количество видео одновременно.

Кроме того, мне интересно, есть ли способ применить foreach l oop к каждому элементу в массиве, КРОМЕ для элемента в 0-м индексе.

Ответы [ 2 ]

1 голос
/ 24 января 2020

У объектов нет метода forEach, вместо этого вы можете создать массив ключей объектов & l oop с помощью ключей, чтобы получить доступ ко всем ключам и проверить значения, подобные этой

Object.keys(videos).forEach((vid)=>{
    if (videos[vid].media.readyState === 4) {
        videos[vid].currentTime(
          videos.a.currentTime()
        );
      }
});
0 голосов
/ 24 января 2020

В объектных литералах нет метода forEach, определенного в их прототипе по умолчанию. Это означает, что вам нужно либо реализовать это самостоятельно, либо использовать другой метод. Чтобы реализовать его самостоятельно, вы можете определить не перечисляемый метод forEach как часть вашего объекта, который будет выполнять функцию обратного вызова для каждого свойства вашего объекта, передавая значение и ключ для обратного вызова:

var videos = {
    a: "#a",
    b: "#b",
    c: "#c",
}

Object.defineProperty(videos, 'forEach', {
    enumerable: false,
    value:  function(f) {
      for(const key in this)
        f(this[key], key);
    }
});

videos.forEach(function(value, key) {
  console.log("value:", value, "key:", key);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...