2014-06-07 49 views
1

我想遍歷從位於服務器上的REST服務收到的學生列表。此列表包含註冊在部分中的學生的對象。每個對象都有名字,姓氏,學號和許多其他屬性,特別是一個名爲isAbsent的屬性。它是一個布爾值,如果學生不在場,則爲真,如果學生不在場,則爲假。我想將缺席的學生ID(有isAbsent=true)存儲在另一個字符串數組中。循環訪問JavaScript中的對象列表

我嘗試這樣做:

{ 
    //this array will store the IDs of students who are absent. 
    $scope.selection = []; 
    //$scope.studentList is the list of students for CRN=X and Date=Y 
    for (id in $scope.studentList) { 
     if ($scope.studentList.isAbsent === true) { 
      $scope.selection.push($scope.studentList.id); 
      console.log($scope.selection); 
     } 
    } 
} 

此代碼不能執行。我不知道爲什麼,我猜想循環結構中的問題。任何幫助?

回答

2

也許這會有幫助嗎?

for (var i=0;i<$scope.studentList.length;i++) 
{ 
    if ($scope.studentList[i].isAbsent === true) 
    { 
     $scope.selection.push($scope.studentList[i].id); 
     console.log($scope.selection); 
    } 
} 

p.s.不要使用for..in與數組。它將顯示一個索引而不是一個值。這不像C#。

+0

它工作得很好,但我需要一些澄清:當我鍵入studentList再接着點,我沒有得到這個列表相關的方法「長度」。這是否意味着我們修改了列表的原型? –

+0

'm不知道我明白你的問題 –

+0

我使用的是Netbeans 8.0,我的意思是,當我輸入studentList時,我希望看到列表上應用的方法的下拉建議列表,例如,studentList.getOwnPropertyNames()和由IDE建議的studentList.defineProperty()。但是,方法studentList.length不會顯示在此列表中。 –

3

根據您需要支持哪些瀏覽器(例如IE> = 9),我建議較新的foreach construct。我覺得它更容易使用:

$scope.studentList.forEach(function(value, index, array) { 
    if (value.isAbsent === true) 
    { 
     $scope.selection.push(value.id); 
     console.log($scope.selection); 
    } 
});