首页 > 解决方案 > 删除不必要的重复

问题描述

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

    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/

默认设置中不需要这些 playerVars。只有在需要时才会将它们添加到 loadPlayer。

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

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

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

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

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

标签: javascriptduplicatesyoutube-apiyoutube-javascript-api

解决方案


我不太了解您的问题,但据我了解,您想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));
}

推荐阅读