2015-05-19 105 views
1

這是我的目標推嵌套的JavaScript對象的屬性分爲多個陣列

{ 
    "_id": "555ab225ae9c30b57432e1d2", 
    "firstname": "Mindy", 
    "lastname": "Martinez", 
    "subjects": [ 
     { 
     "name": "Mathematics", 
     "grades": { 
      "assignments": 16, 
      "tests": 4, 
      "final": 38 
     } 
     },{ 
     "name": "English", 
     "grades": { 
      "assignments": 10, 
      "tests": 12, 
      "final": 35 
     } 
     },{ 
     "name": "Chemistry", 
     "grades": { 
      "assignments": 19, 
      "tests": 8, 
      "final": 3 
     } 
     },{ 
     "name": "Physics", 
     "grades": { 
      "assignments": 4, 
      "tests": 26, 
      "final": 32 
     } 
     },{ 
     "name": "Biology", 
     "grades": { 
      "assignments": 19, 
      "tests": 26, 
      "final": 1 
     } 
     },{ 
     "name": "F Maths", 
     "grades": { 
      "assignments": 4, 
      "tests": 6, 
      "final": 11 
     } 
     } 
    ] 
    } 

我需要知道如何將主題名稱和等級的總金額(分配+測試+決賽)推入單獨的陣列科目(主題名稱)和得分(的任務測試和最後的總和)

var subjects = []; 
    var scores = []; 
    for(var x in $scope.data.subjects){ 
    subjects.push(x.name); 
    } 
    for(var y in $scope.data.subjects){ 
    scores.push(y.assignments+y.tests+y.final); 
    } 

繼承人我的代碼http://plnkr.co/edit/RXzjPllg0RSWjvgMjIoU?p=preview

是我的嘗試是// //數據註釋下面。由於雷達圖的標籤顯示與數據相同的東西,因此藥劑似乎起作用

+0

歡迎#1,你需要在你的問題相關的代碼,只需連接到它不會做。 – max

+0

編輯.. –

+1

至少在(var x在$ scope.data.subjects中),x是索引。將循環中的x和y都更改爲$ scope.data.subjects [x]後,我可以看到一些東西。不知道這是你想要的 – ABOS

回答

2

你可以簡單地取代你for loopsangular.forEach

angular.forEach($scope.data.subjects, function(x){ 
    subjects.push(x.name); 
    }) 
    angular.forEach($scope.data.subjects, function(y){ 
    scores.push(y.grades.assignments+y.grades.tests+y.grades.final); 
    }) 

甚至在一個單一的angular.forEach這樣的:

angular.forEach($scope.data.subjects, function(x){ 
    subjects.push(x.name); 
    scores.push(x.grades.assignments+x.grades.tests+x.grades.final); 
    }) 

更新plunker。請參閱控制檯scores

+0

感謝您使用「Angular Way」 –

1

你需要從這個改變的環路:

for(var x in $scope.data.subjects){ 
    subjects.push(x.name); 
    } 

這樣:

$scope.data.subjects.forEach(function(x) { 
    subjects.push(x.name); 
    }); 

它爲我在你的榜樣。

1

您的第一個循環嘗試從索引(x)中獲取屬性「名稱」,這就是爲什麼您在圖表上看到「未定義」的原因。 (屬性'name'在索引上是未定義的)。

我將繼續介紹Nico在我上面說過的話,你不應該在數組中使用'for in'循環,簡單的for循環就足夠了。

與第一個循環相同的問題適用於第二個,索引y沒有屬性'tests',因此結果未定義。另外值得注意的是,你的數據結構不具有「測試」爲主題的參數對象,而是檔次對象的主體對象的內部,所以要得到你需要使用

subject.grades.tests 

的數據獲得考試成績。 (您可以使用類似的代碼來獲得其他分數類型)

此外,您不需要使用兩個循環將數據存入兩個數組(您的循環是相同的)。

的採樣位(據我可以告訴)工作的代碼如下:

//Data// 
var subjects = []; 
var scores = []; 
var iter; 
for(iter = 0; iter < $scope.data.subjects.length; iter = iter + 1) 
{ 
    var x = $scope.data.subjects[iter]; 
    subjects.push(x.name); 
    scores.push(x.grades.tests + x.grades.assignments + x.grades.final); 
}