1

動的に整数 (以下の場合は 100 または 500) を生成し、それを使用して別の配列にアクセスしたいと思います。後のステップ (以下のコードの一部ではありません) で、これらの配列のさまざまな部分にも同じ方法でアクセスしたいと思います (「メッセージ 1、2、または 3」)。

この概念実証では、整数を動的に生成しませんでしたが、100 に設定しました。

eval()そこで、「警告」と 100 で構成される配列名を動的に生成するために使用しようとしましたが、正しく動作しません。

これは私のコードです:

// two arrays are defined, warning100 and warning500
var warning100 = [
    { "message1":"Ok, go ahead and start typing!" },
    { "message2":"Keep going!" },
    { "message3":"You can do it!" }
];

var warning500 = [
    { "message1":"Slow down..." },
    { "message2":"That's it!" },
    { "message3":"Maximum reached." }
];

// set i to 100 and h to 1 for testing purposes, will be random integers in the final version
var i = 100;
var h = 2;
// create variable names as a combination of a string and i or h
// those variables will be used to access one of the arrays from above and one of the messages;
eval("var warningNumber = warning" + i + ";");
eval("var messageNumber = message" + h + ";");

/* alternative code for creating the two variable values
var warningNumber = "warning" + i;
var messageNumber = "message" + h;
*/

// the variable warningNumber from above is now used again to access the array warning100
// the varaible messageNumber is used to access one of the messages
// within that array message1 should be displayed
// create variable to be used in the document.write below
var warning = warningNumber[0].messageNumber;

// should alert "Ok, go ahead and start typing!"    
alert(warning);
4

3 に答える 3

1

警告の各セットを warningNumber オブジェクトの一部にしないのはなぜですか? そうすればできる

var warnings = {100: { 1:"Ok, go ahead and start typing!",
                       2:"Keep going!",
                       3:"You can do it!"
                     },
                500: { 1:"Slow down...",
                       2:"That's it!",
                       3:"Maximum reached."
                     }
               };
alert(warnings[i][h]);

そうすれば、すべての評価を行う必要さえありません。

于 2012-10-15T15:10:35.170 に答える
0

なぜそれをオブジェクトで包んでみませんか?

var dynamicHolder = {};
var i = 100;
var h = 2;
dynamicHolder["warningNumber"] = "warning" + i;
dynamicHolder["messageNumber"] = "message" + h;
于 2012-10-15T15:27:43.443 に答える
-1

これを試して:

var warnings = {

    warning100: {
        "message1":"Ok, go ahead and start typing!",
        "message2":"Keep going!",
        "message3":"You can do it!"
    },
    warning500: {
        "message1":"Slow down...",
        "message2":"That's it!",
        "message3":"Maximum reached."
    }
}

var i = 100;
console.log( warnings["warning" + i] );
i += 400;
console.log( warnings["warning" + i] );

console.log( warnings["warning" + i ]["message1"] );

于 2012-10-15T15:08:09.203 に答える