节点JS for循环不起作用

在节点js中,在运行for循环之后,descrip不包含任何东西,没有字段写入descrip数组,为什么?

data = data['data']; var course = data['course']; data = data['sections']; var descrip = new Array(); console.log(data.length); for (var i = data.size - 1; i >= 0; i--) { var data = data[i]; var section = data['section']; var day = data['day']; var date = data['date']; var start = data['start_time']; var end = data['end_time']; var location = data['location']; var res = 'Section: '+section+'\nDate: '+date+' '+day+'\nLocation: '+location+'\nStart: '+start+'\tEnd: '+end; descrip.push(res); }; 

假设你期望data是一个数组, data.size - 1将为-1因为data.sizenull 。 所以它会立即退出循环。 你可能想要data.length

JavaScript中数组的lengthlength属性返回:

 for (var i = data.length - 1; i >= 0; i--) { // no block scope in JS, using data as a variable name here overwrites array // var data = data[i]; var _data = data[i]; var section = _data['section']; var day = _data['day']; var date = _data['date']; var start = _data['start_time']; var end = _data['end_time']; var location = _data['location']; var res = 'Section: '+section+'\nDate: '+date+' '+day+'\nLocation: '+location+'\nStart: '+start+'\tEnd: '+end; descrip.push(res); }; 

另外,正如@Red Alert的评论所指出的那样,你在for循环中覆盖你的datavariables(JavaScript没有块范围的概念)。 我已经重命名了_data,但是你可能会想出一个更有意义的名字来区分数组和当前迭代的元素。