我所拥有的是一系列存储为变量的声音文件。我想创建动态数组,以便根据满足的某些条件填充某些声音。
例如,我声明了3个声音文件。
var E82 = new buzz.sound("https://github.com/CMGDesignStudios/Letters-and-Sounds/blob/master/LE0.mp3?raw=true");
var F87 = new buzz.sound("https://github.com/CMGDesignStudios/Letters-and-Sounds/blob/master/LE1.mp3?raw=true");
var FS92 = new buzz.sound("https://github.com/CMGDesignStudios/Letters-and-Sounds/blob/master/LE2.mp3?raw=true");
在某些情况下,我可能需要前两个声音文件。其他时候,我可能需要第二个两个声音文件。所以我创建了以下对象。
var soundFileGroups = {criteria1:[E82,F87],
criteria2:[F87,FS92]};
我尝试使用
访问我需要的内容var currentSounds = soundFileGroups ["criteria1"];
或
var currentSounds = soundFileGroups ["criteria1"][0];
这些都让我的程序崩溃了。
我还尝试按如下方式创建对象:
var soundFileGroups = {criteria1:"E82,F87",
criteria2:"F87,FS92"};
我可以使用以下内容访问此数据:
var currentSounds=soundFileGroups["criteria1"].split(',');
但是,我只得到一个包含变量名称的字符串,并且不知道如何告诉javascript检索与该字符串匹配的变量名的数据。
是否可以在javascript中声明多个变量的值,将这些变量名放在数组或对象中,然后通过索引数组或对象中的变量名来访问变量的值?
答案 0 :(得分:1)
对这个问题:
但是,我只得到一个包含变量名称的字符串,并且不知道如何告诉javascript检索与该字符串匹配的变量名称的数据。
您可以使用eval
var currentSounds=soundFileGroups["criteria1"].split(',');
//here currentSounds is an array of variable names.
//to get the value out of them do a for loop
currentSounds.forEach(function(sound){
var val = eval(sound);
console.log(val);
//do your code with val
})
希望这有帮助!
答案 1 :(得分:0)
如果您能够获取变量的名称,则可以通过window[variableName]
希望这有帮助
答案 2 :(得分:0)
var soundFileGroups = {criteria1:"E82,F87",
criteria2:"F87,FS92"};
以上不会奏效,因为您将条件1和条件2设置为不会引用您已创建的变量的字符串。当你将它们分成一个数组时,它们仍然只是字符串。
var soundFileGroups = {criteria1:[E82,F87],
criteria2:[F87,FS92]};`
你在这里走在正确的轨道上。我认为关键可能在于您如何使用这些标准。
var currentSounds = soundFileGroups ["criteria1"];
此行将为您提供包含[E82, F87]
var currentSounds = soundFileGroups ["criteria1"][0];
这将为您提供criteria1数组E82
让我们说你想在条件1中播放每个声音。您可以尝试以下代码。
var E82 = new buzz.sound("https://github.com/CMGDesignStudios/Letters-and-Sounds/blob/master/LE0.mp3?raw=true");
var F87 = new buzz.sound("https://github.com/CMGDesignStudios/Letters-and-Sounds/blob/master/LE1.mp3?raw=true");
var FS92 = new buzz.sound("https://github.com/CMGDesignStudios/Letters-and-Sounds/blob/master/LE2.mp3?raw=true");
var soundFileGroups = {
criteria1:[E82, F87],
criteria2:[F87, FS92]
};
var currentSounds = soundFileGroups.criteria1;
currentSounds.forEach(function(sound) {
sound.play();
});