1

我有一个 JavaScript 对象,如下所示。

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

现在用户输入学生的姓名,比如说Student1我需要获取该对象的详细信息。

我有两个问题。

[1]如何使用 JavaScript 获取录入学生的详细信息?

当我使用sampleData.studendsList.valueOf("Student1")返回给我完整的对象。我只需要“Student1”的详细信息。

[2]这是正确的做法吗?或者我们应该创建一个学生数组,其中包含一个名为“name”的属性,其值为 say Student1?如果我采用这种方法,那么我需要遍历整个数组列表以获取学生的详细信息。

哪种方法更好?

4

5 回答 5

2

sampleData.studentsList.Student1或者sampleData.studentsList["Student1"]

于 2012-07-10T16:38:30.837 回答
1

[1] 使用访问通过 访问属性[]。这样你就可以在那里插入一个变量,而不仅仅是一个硬编码的标识符。

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

[2]为了快速访问特定学生,这是 imo 更好的方法。任何数组都将涉及某种数组扫描以访问特定的详细信息对象。

于 2012-07-10T16:39:36.343 回答
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]给定一个存储在 javascript 变量中的学生姓名,我们称之为它studentName,您可以像这样访问该学生的详细信息:

var studentData = sampleData.studentsList[studentName];

[2]在数组或对象之间进行选择时,最重要的决定因素是:key 是什么意思?如果键不相关或只是数字,它应该是一个数组。在这种情况下,关键是学生的名字,所以有一个对象绝对是更好的选择。

于 2012-07-10T17:13:56.637 回答
0

编辑...我刚刚意识到您只是在适当地构建对象(而不是将其作为字符串)...所以实际上您可以跳过解析并直接通过..

sampleData.studentsList.Student1

但是,如果您拥有该对象的确切形状,但作为字符串,您需要先 JSON.parse 它像这样......

 myObj = JSON.parse(yourString);

    myObj.studentsList.Student1
于 2012-07-10T16:37:57.060 回答