动态生成具有变量名称和字符串的数组

时间:2017-10-03 17:04:50

标签: javascript jquery arrays

我使用一组数组来填充页面上的一些电台选择

//holds the set value of the variable
var universalVariables = [thing1, thing2, thing3]; 
//used for the classes in the radios to get values later
var universalNames = ['thing1','thing2','thing3']; 
//used to put a label on each radio
var universalAttributes = ['THING ONE', 'THING TWO', 'THING THREE']; 

其次是:

$.each(universalVariables, function(index, val) {
  $('#universalAttributes').append('<br />' + universalAttributes[index] + '<br /><div class="radio"><label><input type="radio" name="' + universalNames[index] + '" value="false">FALSE</label></div><div class="radio"><label><input type="radio" name="' + universalNames[index] + '" value="true">TRUE</label></div>')
});

//set data
$.each(universalVariables, function(index, val) {
  if (universalVariables[index] == false) {
    $("input[name=" + universalNames[index] + "][value=false]").prop('checked', true);
  } else if (universalVariables[index] == true) {
    $("input[name=" + universalNames[index] + "][value=true]").prop('checked', true);
  }
});

这会创建三个(因为我的数组中有三个变量)无线电,但显然可以处理任意数量的无线电。您需要做的就是提供数组中的信息(而不是编写无线电选择自己)。

这里有三条信息

当您必须添加变量时会出现问题。理想情况下,我想生成前两个数组。我可以提供单词列表然后生成。诀窍(无论如何)是这样做的,其中一个数组有字符串名称,另一个数组需要变量NAMES而不是变量VALUES。

必须有一种简单的方法。接受任何建议。

1 个答案:

答案 0 :(得分:1)

您可以存储&#34;元数据&#34;对象中的变量,并通过与变量名匹配的键访问它们,如下所示:

您还可以在将输入附加到容器的同时设置checked属性,从而无需第二个循环。

&#13;
&#13;
var universalVariables = {
  "thing1": {
    value: true,
    attribute: "THING ONE"
  },
  "thing2": {
    value: false,
    attribute: "THING TWO"
  },
  "thing3": {
    value: true,
    attribute: "THING THREE"
  },
};
// used so we can guarantee correct sequential order
var universalNames = ['thing1','thing2','thing3']; 

$.each(universalNames, function(index, name) {
  var objVar = universalVariables[name];
  $('#universalAttributes')
    .append('<br />' + objVar.attribute + 
            '<br /><div class="radio"><label><input type="radio" name="' + name + 
            '" value="false"' + (objVar.value ? '' : 'checked') + '>FALSE</label></div><div class="radio"><label><input type="radio" name="' + name + 
            '" value="true"' + (objVar.value ? 'checked' : '') + '>TRUE</label></div>')
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="universalAttributes"></div>
&#13;
&#13;
&#13;