2012-07-10 73 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]大確定何時因素在數組或對象之間進行選擇是:關鍵是什麼意思?如果密鑰不相關或只是數字,它應該是一個數組。在這種情況下,關鍵是學生的名字,所以擁有一個物體肯定是更好的選擇。