2016-05-12 168 views
0

我使用角度承諾從服務器獲取一些數據。在承諾的成就我做使用多維數組循環對象

promise.success(function (data, status) {       
    for (i = 0; i <= data.data.length; i++){ 
    $scope.anArray[i] = data.data[i][1] ; 
    } 
}      

我這樣做是因爲從服務器傳來data具有這種結構

{"result":"answered","data":[["jake","508"],["amir","602"],["ben","450"]]} 

,我只想要得到的數字508,602和450,但我總能得到同樣的錯誤TypeError: Cannot read property '0' of undefined重蹈這條線:$scope.anArray[i] = data.data[i][0] ;

這些數字是供圖書館用來創建圖表的。有時圖表是創建的,有時候不是。即使它被創建,同樣的錯誤總是在那裏。

我不知道如何解決這個錯誤,並讓圖表始終創建沒有任何問題。看起來像代碼不喜歡data.data[i][0]結構,有一個簡單的數組像data.data[i]不會創建一個錯誤。

我該怎麼辦?

謝謝

+1

使用'angular.forEach()'是方式更清潔,並已在lib核心。 https://docs.angularjs.org/api/ng/function/angular.forEach – sbaaaang

+0

@sbaaaang我選擇Paarths答案作爲正確的答案,因爲它需要最少量的編輯來修復我的代碼。但是你的建議也非常好,我甚至忘記了'forEach'。謝謝您的幫助。 – slevin

+0

當然不用擔心,只要記住angular.forEach()就是一個循環更清潔,更易於使用,當你有這個時使用普通js沒有任何意義;) – sbaaaang

回答

1

您的for循環有額外的執行。您已將i初始化爲0,但您也使用了<=,這意味着您將執行array[array.length],該債務已脫離債券。那會返回undefined,並且當您嘗試訪問未定義的[0]索引時,您會得到該錯誤。

更改爲

for (i = 0; i < data.data.length; i++){ 

如果你能夠做到轉讓個人而言,我會去與

$scope.anArray = data.data.map(entry => entry[1]); 

,並跳過for循環完全。注意如果你想避免lambdas這將是

$scope.anArray = data.data.map(function(entry) { return entry[1]; }); 
+0

是的,我願意編寫'$ scope .anArray [i] = data.data [i] [1];',我編輯了我的問題,所以你可以從你的答案中刪除那個部分。另外...... DUDE,你是對的,我所要做的就是從我的作品中抹去。謝謝 – slevin