2012-07-10 84 views
1

我有一个JavaScript对象,如下所示。JavaScript对象数据和数组

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

现在,用户输入一个学生的名字,说Student1,我需要得到该对象的细节。

我有两个问题。

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

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

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

哪一个更好?

+1

上面的代码中有* no *数组。更好的方法是将其结构化为*使用阵列,因为它们在这里是更自然的结构。 – 2012-07-10 16:39:31

+0

如果您没有任何其他样本数据,您并不需要'sampleData'包装数组。你可以只有'var studentsList = {blah}'。 – Will 2012-07-10 16:39:39

+0

@pst,在上面的例子中,我没有一个数组。但是我可以有一组学生,名称可以是该数组中的一个属性。我认为这是代表它的最好方式,但是在性能方面,我不确定这是否正确。 – Apps 2012-07-10 16:43:29

回答

1

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

sampleData.studentsList.Student1 

构建一个数组是这样的:

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

访问nth学生是这样的:

sampleData.studentsList[n] 

如果不知道所需学生的索引,则访问特定学生(根据其详细信息)为O(n)(因为您需要ite评估整个阵列以在最坏的情况下找到正确的项目)。

+0

是的,这就是我的想法......非常感谢大家。 – Apps 2012-07-10 16:44:28

0

编辑...我只是意识到你只是建立在地方的对象(而不是作为一个字符串)......所以其实你可以跳过解析和刚刚通过获取对象直接。 。

sampleData.studentsList.Student1 

然而,如果你有这样的对象的确切形状你拥有了它,但作为一个字符串你需要先JSON.parse它是这样的...

myObj = JSON.parse(yourString); 

    myObj.studentsList.Student1 
+1

@am不是我,好点...我编辑。 – 2012-07-10 16:40:49

2

sampleData.studentsList.Student1 OR sampleData.studentsList["Student1"]

1

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

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

[2]要快速访问特定学生,这更好的办法海事组织。任何阵列都会涉及某种阵列扫描以访问特定的细节对象。

1

[1]给予学生姓名存储在一个javascript变量,我们称之为studentName,你将访问等,使得学生的详细信息:

var studentData = sampleData.studentsList[studentName]; 

[2]大确定何时因素在数组或对象之间进行选择是:关键是什么意思?如果密钥不相关或只是数字,它应该是一个数组。在这种情况下,关键是学生的名字,所以拥有一个物体肯定是更好的选择。