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));
}
我有一个字符串数组,我想为每个字符串定义一个值。一个简单的例子是
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));
}