是否可以将变量存储在数组或对象中并引用它以获取变量的值而不是变量的字符串名称?

时间:2016-02-21 04:33:32

标签: javascript arrays object audio

我所拥有的是一系列存储为变量的声音文件。我想创建动态数组,以便根据满足的某些条件填充某些声音。

例如,我声明了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中声明多个变量的值,将这些变量名放在数组或对象中,然后通过索引数组或对象中的变量名来访问变量的值?

3 个答案:

答案 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();
});