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!;;

つまり、'information' 配列の各要素を操作して何らかのマークアップを作成できるようにしたいと考えています。情報配列から必要な情報を取得する方法は既に知っていますが、以下に示すように、名前ごとに個別の変数を宣言する必要があります。

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」という 3 つの変数を作成しますが、変数を作成するには長い道のりです。「情報」配列の 0 番目のインデックス付き要素をループして、配列の各行に 1 つずつ、これらの変数を作成するにはどうすればよいですか?

    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

現在のアプローチでは、2 番目の配列を必要としないように微調整するだけです。

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!"

リテラル,にも a がありません。information

于 2013-10-21T17:43:06.137 に答える
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 myvariable = 4;
alert(window["myvariable"]); // will alert 4

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