使用for循环将字符串变量分配给数组

时间:2016-11-07 02:14:24

标签: javascript arrays variables for-loop system-verilog

我有一个字符串变量列表,我想将所有这些分配给一个数组,但列表很多,有没有可能让我使用for循环来分配它。

var class_1 = "some description..";
var class_2 = "some description..";
var class_3 = "some description..";
var class_4 = "some description..";
var class_5 = "some description..";
.
. 
var class_100 = "some description..";

var classes = [];

for(var i = 0; i < 100; i++){

 //loop string variables to array    

}

我认为我不可能手动为阵列分配100个变量。谁知道任何技术?谢谢。

[UPDATE]它需要SystemVerilog语法,因为我不熟悉那种语言,所以我在Javascript中提出这个想法。

4 个答案:

答案 0 :(得分:1)

SystemVerilog无法从独立命名变量列表构建值数组,而无需手动将每个变量分配给数组元素。

classes[0] = class_0;
classes[1] = class_1;
classes[2] = class_2;
...

用于变量名称的标识符具有数字序列的事实并不重要,因为除了确切的名称之外,您无法访问标识符。
如果要自动执行此操作,则需要更改字符串变量的定义方式。正如人们已经发布的那样,这应该使用数组开始建模,可能使用关联数组:

string classes[string];
classes["class_1"] = "some description..";
classes["class_2"] = "some description..";
classes["class_3"] = "some description..";

foreach(classes[name])
       // do something with classes[name]

另一种选择是为每个变量使用SystemVerilog类对象

class stringvar;
  string m_name;
  static stringvar list[$];
  function new(string name);
    m_name = name;
    list.push_back(this);
  endfunction 
endclass

stringvar class_0 = new("some description..");
stringvar class_1 = new("some description..");
stringvar class_2 = new("some description..");
...
foreach(stringvar::list[item])
   // do something with item.m_name

答案 1 :(得分:0)

这样的事情:

var class_1 = "some description..";
var class_2 = "some description..";
var class_3 = "some description..";
var class_4 = "some description..";
var class_5 = "some description..";

var class_100 = "some description..";

var classes = [];
for(var i = 0; i < 100; i++){

 classes.push(window['class_'+i])

}

答案 2 :(得分:0)

  

你有100个变量吗?你应该先解决这个问题

我认为这个评论有一些道理。但是要回答你的问题:假设你的变量遵循上面例子所示的相同命名约定,你可以用这样的数组值分配预定义变量:

var a = []
for(var i = 0; i < num_vars; i++){
    var key = 'class_' + (i + 1)
    if (this[key])
        a.push(this[key])
}

答案 3 :(得分:0)

你也许可以使用eval。像这样的东西:

for (var i = 0; i < 100; i++) {
    var toEval = "classes.push(class_" + i + ")";
    eval(toEval);
}