0

私の名前はマイクです。私の質問は 2 つあります。

  1. question配列内のオブジェクトにアクセスして、プロンプトに正しく表示されるようにするにはどうすればよいですか?
  2. ステートメントでランダムに選択されたオブジェクトのプロパティにアクセスするにはどうすればよいif/elseですか?

さまざまな種類の音響機器を覚えるのに役立つ簡単なフラッシュカード プログラムを作成しようとしています。機器のリストは膨大ですが、この例を簡単にするために 3 つの異なる種類のみを含めています。各オブジェクトに と の 2 つのプロパティが必要answerですdesc。この最初の部分では、3 つのオブジェクトを定義し、それらを配列に配置し、配列項目の 1 つをランダムに選択するための変数と、ユーザーにanswer.

var newFlash = function() {
    var A827 = {
        answer: "T",
        desc: "Multitrack Tape Recorder"
    };
    var LA2A = {
        answer: "O",
        desc: "Classic Leveling Amplifier"
    };
    var SonyC800G = {
        answer: "M",
        desc: "Tube Condenser Microphone"
    };
    var list = [A827, LA2A, SonyC800G];
    var rand = Math.floor(Math.random() * list.length);
    var question = prompt("What kind of equipment is " + list[rand] + "?");
};

ここで、配列内の 3 つの項目をすべて文字列にすると、プロンプトに問題なく表示され、適切な配列項目にquestion正しく置き換えられます。list[rand]ただし、配列内のオブジェクトを使用すると、プロンプトは と表示されます"What kind of equipment is [object Object]?

私の最終的な目標は、ユーザーが適切な 1 文字または 2 文字の応答 (マイクは M、コンソールは C、アウトボード ギアは O、テープ マシンは T、ソフトウェアは S、コンピューター ハードウェアは CH) を入力することです。成功した文字は、オブジェクトのanswerとの両方を表示するアラートを生成しますdesc。私のn00bの本能は、この2番目の部分は次if/elseの形式のステートメントであるべきだと教えてくれます

if (question == list[rand.answer]) {
    alert("Correct, Answer: " + list[rand.answer] + ", a " + list[rand.desc] + "!");
}
else {
    alert("Wrong, try again.");
}

しかし、これがこれらのオブジェクト プロパティにアクセスする正しい方法ではないことは確かです。

繰り返しになりますが、私の質問には 2 つの部分があります。

  1. question配列内のオブジェクトにアクセスして、プロンプトに正しく表示されるようにするにはどうすればよいですか?
  2. ステートメントでランダムに選択されたオブジェクトのプロパティにアクセスするにはどうすればよいif/elseですか?

いくつかの論理が私を逃れていると確信しています。読んでくれてありがとう。

4

2 に答える 2

0

Javascript でオブジェクトのプロパティにアクセスするには、オブジェクトを持つ多くの言語で一般的であるように、ドット表記を使用します。 listはオブジェクトの配列であるため、入力list[rand]すると、それらのオブジェクトの 1 つが返されます。オブジェクトを取得したら、ドット表記を使用して必要なプロパティにアクセスするだけです。この場合はdescまたはanswer.

だから代わりに

var question = prompt("What kind of equipment is " + list[rand] + "?");

試す

var question = prompt("What kind of equipment is " + list[rand].desc + "?");

アクセスしようとしているプロパティをブラケットの外側に配置します。これにより、2番目の質問も解決されます。変更するだけです:

if (question == list[rand.answer]) {
    alert("Correct, Answer: " + list[rand.answer] + ", a " + list[rand.desc] + "!");

に:

if (question == list[rand].answer) {
    alert("Correct, Answer: " + list[rand].answer + ", a " + list[rand].desc + "!");

このフィドルはデモンストレーションに役立ちます。

于 2013-04-25T03:46:44.240 に答える
0

を使用しますvar question = prompt("What kind of equipment is " + list[rand].desc + "?");list[rand]構造を持つオブジェクトが生成される{answer: "", desc: ""}ため、コード内の説明にさらにアクセスする必要があります。

同様に、次のことが必要です。

if (question == list[rand].answer) {
    alert("Correct, Answer: " + list[rand].answer + ", a " + list[rand].desc + "!");
}
else {
    alert("Wrong, try again.");
}
于 2013-04-25T03:45:23.027 に答える