删除不必要的重复

时间:2018-12-05 13:56:21

标签: javascript duplicates youtube-api youtube-javascript-api

我正在尝试从默认设置中删除这些playerVar,因为这是不必要的重复操作。

    start: 0,
    end: 999999,
    loop: true,

https://jsfiddle.net/hzyrfkwb/461/

  function addVideo(video, settings) {
      const defaultSettings = {
              width: settings.width || 640,
              height: settings.height || 390,
              videoId: video.dataset.id,
              playerVars: {
                  start: 0,
                  end: 999999,
                  loop: true,

是否有一种方法可以只在需要时添加它们?

如本例所示:

https://jsfiddle.net/hzyrfkwb/432/

这样做会消除很多不必要的重复。

 loadPlayer({
        target: ".jacketc",
        width: 600,
        height: 338,
        playerVars: {
            start: 200,
            end: 205,
            loop: true
        }
    });

不需要在顶部和底部都注明:

  function addVideo(video, settings) {
 const defaultSettings = {
         width: settings.width || 640,
         height: settings.height || 390,
         videoId: video.dataset.id,
         playerVars: {
             start: 0,
             end: 999999,
             loop: true

以及底部:

loadPlayer({
    target: ".jacketc",
    width: 600,
    height: 338,
    playerVars: {
        start: 200,
        end: 205,
        loop: true
    }
});

这些仅应在需要时添加到loadPlayer中。     在默认设置中,不要求它们位于顶部。

start: 0,
end: 999999,
loop: true,

这些应仅是默认设置:

     autoplay: 1,
     controls: 1,
     showinfo: 1,
     rel: 0,
     iv_load_policy: 3,
     cc_load_policy: 0,
     fs: 0,
     disablekb: 1
 };

仅在需要时将它们添加到loadPlayer中。 如果不需要它们,则不需要出现在javascript中。

    start: 0,
    end: 999999,
    loop: true,

如何对代码进行这种调整?

https://jsfiddle.net/hzyrfkwb/453/

在默认设置中不需要这些playerVar的地方。 仅在需要时将它们添加到loadPlayer。

        start: 200,
        end: 205,
        loop: true,

这正是其他代码中的工作方式。

https://jsfiddle.net/hzyrfkwb/465/

我将如何在新的更新代码中实现它?

https://jsfiddle.net/hzyrfkwb/453/

1 个答案:

答案 0 :(得分:1)

我不太了解您的问题,但是据我了解,您想在函数playerVars中任选地设置addVideo(),但又不想将playerVars定义为输入变量?也许你可以试试这个

["start", "end", "loop"].forEach(function (a) {
    if (settings[a]) {
        defaultSettings.playerVars[a] = settings[a];
    }
});
// or
for (let a of ["start", "end", "loop"]) {
  if (settings[a]) defaultSettings.playerVars[a] = settings[a];
}
// or
let optional = ["start", "end", "loop"];
for (let i = 0; i < optional.length; i++) {
  if (settings[optional[i]]) {
    defaultSettings.playerVars[optional[i]] = settings[optional[i]];
  }
}

完整代码

function addVideo(video, settings) {
  const defaultSettings = {
    width: settings.width || 640,
    height: settings.height || 390,
    videoId: video.dataset.id,
    playerVars: {
      autoplay: 1,
      controls: 1,
      showinfo: 1,
      rel: 0,
      iv_load_policy: 3,
      cc_load_policy: 0,
      fs: 0,
      disablekb: 1
    },
    events: {
      "onReady": onPlayerReady,
      "onStateChange": onPlayerStateChange
    }
  };
  ["start", "end", "loop"].forEach(function(a) {
      if (settings[a]) defaultSettings.playerVars[a] = settings[a];
  });
  const updatedSettings = combineSettings(defaultSettings, settings);
  console.log(updatedSettings)
  players.push(new YT.Player(video, updatedSettings));
}