1

次のような JavaScript オブジェクトがあります。

var sampleData = {
    "studentsList": {
        "Student1": {
            "marks": "123",
            "grade": "B"
        },
        "Student2": {
            "marks": "144",
            "grade": "A"
        }
    }
};​

ここで、ユーザーが学生の名前を入力するとStudent1、そのオブジェクトの詳細を取得する必要があります。

2 つの質問があります。

[1] JavaScript を使用して、入力した学生の詳細を取得するにはどうすればよいですか?

使用するsampleData.studendsList.valueOf("Student1")と、完全なオブジェクトが返されます。「Student1」の詳細が必要です。

[2]これは正しい方法ですか? または、学生の配列を作成する必要があり、その配列には「name」というプロパティと、値が次のように指定されていますStudent1。このアプローチを使用する場合、配列リスト全体を反復処理して学生の詳細を取得する必要があります。

どちらのアプローチが優れていますか?

4

5 に答える 5

2

sampleData.studentsList.Student1またsampleData.studentsList["Student1"]

于 2012-07-10T16:38:30.837 に答える
1

配列は通常、項目のリスト (学生など) を保存するより自然な方法です。しかし、トレードオフがあります。(オブジェクトを使用して) 構造化されているため、一定時間内に名前で任意の生徒にアクセスできます。

sampleData.studentsList.Student1

配列で構造化すると、次のようになります。

var sampleData = {
    "studentsList": [
        {
            "marks": "123",
            "grade": "B"
        },
        {
            "marks": "144",
            "grade": "A"
        }
    ]
};​

nth次のように学生にアクセスします。

sampleData.studentsList[n]

目的の学生のインデックスが不明な場合、(詳細に基づいて) 特定の学生にアクセスすることはO(n)(最悪の場合、正しいアイテムを見つけるために配列全体を反復処理する必要があるため) です。

于 2012-07-10T16:41:18.767 に答える
1

[1] アクセス経由でプロパティにアクセスし[]ます。そうすれば、ハードコードされた識別子だけでなく、そこに変数を挿入できます。

var studentDetails = sampleData.studendsList[ "Student1" ];

[2]特定の学生にすばやくアクセスするには、これがより良いアプローチです。配列には、特定の詳細オブジェクトにアクセスするための何らかの配列スキャンが含まれます。

于 2012-07-10T16:39:36.343 に答える
0

編集...オブジェクトを(文字列としてではなく)その場で構築しているだけであることに気付きました...実際には、解析をスキップして、..経由で直接オブジェクトにアクセスできます。

sampleData.studentsList.Student1

ただし、そのオブジェクトが正確な形状である場合は、それを持っていますが、文字列として最初に JSON.parse する必要があります...

 myObj = JSON.parse(yourString);

    myObj.studentsList.Student1
于 2012-07-10T16:37:57.060 に答える