0

我有一个名为“信息”的变量,它创建了一个多维数组。对于数组中的每一行,我想返回一个变量,其名称是数组中的第一个值。换句话说,给定下面的“信息”数组,我想要以下输出:

var lunalovegood = information[i][2] + ' ' + information[i][3] + ' is a ' + information[i]    [1] + '!'; //Luna Lovegood is a Ravenclaw!;
var dracomalfoy = information[i][2] + ' ' + information[i][3] + ' is a ' + information[i]    [1] + '!'; //Draco Malfoy is a Slythering!;;
var hermionegranger = information[i][2] + ' ' + information[i][3] + ' is a ' + information[i]    [1] + '!'; //Hermione Granger is a Gryffindor!;;

换句话说,我希望能够使用“信息”数组中的每个元素来创建一些标记。我已经知道如何在给定信息数组的情况下获取我需要的信息,但是正如您在下面看到的,我必须为每个名称声明单独的变量。

for (var i = 0; i < information.length; i++) {
var htmlString = information[i][2] + ' ' + information[i][3] + ' is a ' + information[i]    [1] + '!'; //Luna Lovegood is a Ravenclaw!
$('div').html(htmlString);
} //end for loop 

var information = [
['lunalovegood', 'Ravenclaw', 'Luna', 'Lovegood', '(chaser)', 'lovegood.jpg', 4]
['dracomalfoy', 'Slytherin', 'Draco', 'Malfoy', '(seeker)', 'malfoy.jpg', 2],
['hermionegranger', 'Gryffindor', 'Hermione', 'Granger', '(none)', 'granger.jpg', 3],
];

下面的 javascript 创建了三个变量,称为“lunalovegood”、“dracomalfoy”和“hermionegrange”,但这是创建变量的漫长过程。如何通过循环遍历“信息”数组中的第 0 个索引元素来创建这些变量,数组中的每一行一个?

    var myVariables = {}
   ,varNames = ["lunalovegood","dracomalfoy","hermionegranger"]; 
for (var i=0;i<varNames.length;i+=1){

 myVariables[varNames[i]] = 0;
    console.log(lunalovegood);
}
4

4 回答 4

3

您当前的方法只需要进行最细微的调整即可不需要第二个数组。

var students = {}, i;
for (i = 0; i < information.length; ++i)
    students[information[i][0]] = information[i][2] + ' ' + information[i][3] + ' is a ' + information[i][1] + '!';

现在通过获取Array的第一项来设置密钥。然后,您将为您的文本执行以下操作,

students['lunalovegood']; // "Luna Lovegood is a Ravenclaw!"

,information文字中也缺少 a 。

于 2013-10-21T17:43:06.137 回答
0

这应该可以帮助您:

全局范围内的每个变量都可以作为窗口对象的字符串属性进行访问

var myvariable = 4;
alert(window["myvariable"]); // will alert 4

window["newvariable"] = 6;
alert(newvariable);   // will alert 6
于 2013-10-21T17:37:22.983 回答
0

我同意贝尔吉的观点。变量应该代表由代码定义的一组固定的有限成员;数据(如列表的内容)通常不应引入新变量。

因此,这是我推荐的方法(请注意,我添加的内容比“最低要求”多一点;祝你好运!):

// Using a function makes it easy to change details and avoid leaking
// variables accidentally.
function loadWizards(information) {
  var wizards = [];
  for (var i = 0; i < information.length; i++) {
    var info = information[i];
    var name = info[0];
    // Mapping to named properties means we can forget about indices!
    wizards[name] = {     // <- use Name to map to our Wizard object
        house: info[1],
        // ..
        image: info[7]
    };            
  }
  return wizards;
}

// I have no idea if they are wizards, but give variables useful names.
// 'information' is too generic.
var wizards = loadWizards(information);

// Then later on, use it as:
alert("Hello " + wizards['hermionegranger'].name + "!")
                       // ^-- property access by Name
于 2013-10-21T17:48:38.900 回答
0
var formattedInfo = {}; 
$.each(information, function (i, v) {
    formattedInfo[v[0]] = v[2] + ' ' + v[3] + ' is a ' + v[1];
});

您的信息定义的第一行末尾缺少逗号。

顺便说一句,我非常喜欢哈利波特

于 2013-10-21T17:51:49.467 回答