JavaScript:给字符串赋值

JavaScript: Assign a value to a string

我有一个字符串数组,我想为每个字符串定义一个值。一个简单的例子是

varString = "Hello";
eval(varString + " = 9");
console.log(Hello);

我希望 Hello 得到 9。这显然有效。但我想知道是否有更简洁的版本!

现在,您可能想知道我为什么要这样做!主要原因是我正在尝试为我的 HTML.

中的几个嵌入式 youtube 视频设置“setPlaybackRate”
var player;
function onYouTubeIframeAPIReady() {
  for (let index = 0; index < IDYT.length; index++) {
    element = IDYT[index];
    object1 = Objects1(youtubeVideo[index], YTtime[index]);
    player = new YT.Player(element, object1);
  }
}

如您所见,player 在函数外部定义 onYouTubeIframeAPIReady() 每个 Objects1 函数和 IDYT 定义如下

function Objects1(videoId1, startID1) {
  let object1 = {
    height: "315",
    width: "560",
    videoId: videoId1,
    playerVars: {
      autoplay: 0,
      loop: 1,
      start: startID1,
      // mute: 1,
    },
    events: {
      onStateChange: Test1,
    },
  };
  return object1;
}

let IDYT = ["player", "player1"];
let youtubeVideo = ["00vnln25HBg", "E-xMXv3L5L8"];
let YTtime = [20, 456];

但问题是事件何时启动,即函数 onPlayerStateChange 给出:

function onPlayerStateChange() {
  player.setPlaybackRate(1.5);
}

只有最后一个 youtube 视频将播放速率设置为 1.5,这是我没想到的。我认为这主要是只定义了最后一个 player 变量。如果我能够执行一个字符串循环,将其更改为可能有帮助的变量。如果您能指导我如何解决此问题,我将不胜感激。

非常感谢。

有用的链接:https://developers.google.com/youtube/iframe_api_reference

是的,您的直觉是正确的,只有最后一个玩家被更改,因为其他玩家被下一个玩家覆盖。

一个非常简单的解决方案是维护一个 players 数组。

const players = [];
function onYouTubeIframeAPIReady() {
  for (let index = 0; index < IDYT.length; index++) {
    element = IDYT[index];
    object1 = Objects1(youtubeVideo[index], YTtime[index]);
    players.push(new YT.Player(element, object1));
  }
}

// .....
// ......

function onPlayerStateChange() {
  players.forEach((player) => player.setPlaybackRate(1.5));
}