我在访问对象方法中的数组时遇到问题。 当日志完美地返回值时,以下行返回allRect [n]未定义的错误。
我认为它与变量可访问性有关,但事实上它可以记录在一行并拒绝它在下一行中的存在,这让我有点想法。
谢谢大家。
this.s = Snap('#'+id);
var allRects = [];
this.xPos = 0;
var scale = vizWidth/locationSum(data);
...
//methods
this.updateViz = function() {
apiRequest('datasets', 164, 'json').done(
function(data){
var n = 0;
data = locationDataIntoArray(data);
for(i = 0; i< allRects.length; i++){
console.log(allRects[n]);
allRects[n].animate({ width:parseInt(data[i][2]), opacity:evaluateMachine(data[i][0])},3000);
n++;
allRects[n].animate({ width:parseInt(data[i][3]), opacity:evaluateTech(data[i][1])},3000);
n++;
}
}
)
};
答案 0 :(得分:0)
在此代码中:
for(i = 0; i< allRects.length; i++){
console.log(allRects[n]);
allRects[n].animate({ width:parseInt(data[i][2]), opacity:evaluateMachine(data[i][0])},3000);
n++;
allRects[n].animate({ width:parseInt(data[i][3]), opacity:evaluateTech(data[i][1])},3000);
n++;
}
您在每次迭代时递增n
两次。在for
循环的中途,n
将超出数组的末尾。
第一次循环,当i
和n
均为零时,您将动画allRects[0]
。然后,您递增n
并为allRects[1]
设置动画,然后再次增加n
。因此,在循环的第二次,您将动画allRects[2]
和allRects[3]
,依此类推。