JavaScript对象数据和数组

JavaScript对象数据和数组,javascript,Javascript,我有一个JavaScript对象,如下所示 var sampleData = { "studentsList": { "Student1": { "marks": "123", "grade": "B" }, "Student2": { "marks": "144", "grade": "A" } } };​ 现在,用户

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

var sampleData = {
    "studentsList": {
        "Student1": {
            "marks": "123",
            "grade": "B"
        },
        "Student2": {
            "marks": "144",
            "grade": "A"
        }
    }
};​
现在,用户输入一个学生的名字,比如说
Student1
,我需要获得该对象的详细信息

我有两个问题。

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

使用
sampleData.studendsList.valueOf(“Student1”)时,
返回完整的对象。我只需要“学生1”的详细信息

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


哪种方法更好?

编辑。。。我刚刚意识到您只是在原地构建对象(而不是将其作为字符串)。。。因此,实际上您可以跳过解析,直接通过..访问对象

sampleData.studentsList.Student1
然而,如果你有一个形状完全相同的对象,你就有了它,但是作为一个字符串,你需要先像这样解析它

 myObj = JSON.parse(yourString);

    myObj.studentsList.Student1

编辑。。。我刚刚意识到您只是在原地构建对象(而不是将其作为字符串)。。。因此,实际上您可以跳过解析,直接通过..访问对象

sampleData.studentsList.Student1
然而,如果你有一个形状完全相同的对象,你就有了它,但是作为一个字符串,你需要先像这样解析它

 myObj = JSON.parse(yourString);

    myObj.studentsList.Student1

sampleData.studentsList.Student1
sampleData.studentsList[“Student1”]
sampleData.studentsList.Student1
sampleData.studentsList[“Student1”]
[1]通过
[/code>访问该属性。这样,您就可以在那里插入一个变量,而不仅仅是一个硬编码的标识符

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

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

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

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

[2]对于快速访问特定学生,我认为这是更好的方法。任何数组都会涉及某种数组扫描来访问特定的细节对象。

数组通常是存储项目列表(如学生)的更自然的方式。但也有权衡。由于结构化(使用对象),您可以在固定时间内按姓名访问任何学生:

sampleData.studentsList.Student1
使用数组构造结构如下所示:

var sampleData = {
    "studentsList": [
        {
            "marks": "123",
            "grade": "B"
        },
        {
            "marks": "144",
            "grade": "A"
        }
    ]
};​
sampleData.studentsList[n]
按如下方式访问第n个学生:

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

如果所需学生的索引未知,则访问特定学生(基于其详细信息)是
O(n)
(因为在最坏的情况下,您需要迭代整个数组以找到正确的项目)。

数组通常是存储项目列表(如学生)的更自然的方式。但也有权衡。由于结构化(使用对象),您可以在固定时间内按姓名访问任何学生:

sampleData.studentsList.Student1
使用数组构造结构如下所示:

var sampleData = {
    "studentsList": [
        {
            "marks": "123",
            "grade": "B"
        },
        {
            "marks": "144",
            "grade": "A"
        }
    ]
};​
sampleData.studentsList[n]
按如下方式访问第n个学生:

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

如果所需学生的索引未知,则访问特定学生(基于其详细信息)是
O(n)
(因为在最坏的情况下,您需要迭代整个数组以找到正确的项目)。

[1]给定存储在javascript变量中的学生名,让我们调用它
studentName
,您可以访问该学生的详细信息,如下所示:

var studentData = sampleData.studentsList[studentName];

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

[1]给定一个存储在javascript变量中的学生名字,我们称之为
studentName
,您可以这样访问该学生的详细信息:

var studentData = sampleData.studentsList[studentName];

[2]在数组或对象之间进行选择时,一个重要的决定因素是:键的含义是什么?如果键不相关或只是数字,那么它应该是一个数组。在本例中,键是学生的名字,因此拥有一个对象肯定是更好的选择。

上述代码中没有数组。更好的方法是使用数组进行结构,因为数组是这里更自然的结构。如果没有任何其他样本数据,则不需要使用
sampleData
变量包装数组。您可以只使用
var studentsList={blah}
@pst,在上面的示例中,我没有数组。但我可以有一个学生数组,名称可以是该数组中的一个属性。我认为这是表示它的最好方法,但就性能而言,我不确定这是否是正确的方法。@Apps O(n)通常仅在n增加到“非小值”时才适用。除非存在性能问题,否则请将数据表示为最适合当前问题的数据。从数组创建交叉查找或根据对象属性的相应值对其进行排序非常容易。上面的代码中没有数组。更好的方法是使用数组进行结构,因为数组是这里更自然的结构。如果没有任何其他样本数据,则不需要使用
sampleData
变量包装数组。您可以只使用
var studentsList={blah}
@pst,在上面的示例中,我没有数组。但我可以有一个学生数组,名称可以是该数组中的一个属性。我认为这是表示它的最好方法,但就性能而言,我不确定这是否是正确的方法。@Apps O(n)通常仅在n增加到“非小值”时才适用。除非存在性能问题,否则请将数据表示为最适合当前的数据