2016-05-12 252 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