我的意思是"无法访问"是循环没有启动。对不起,感到困惑。
之前我曾问过这个问题,但我会再次尝试更多细节和完整代码。
基本上,我根据用户的输入过滤输出。但是,我很困惑为什么我无法访问上面代码中标记的for循环中的obj["Entry Fee"]
值和toFilterParams.entry
数组。我可以在循环开始之前访问它,但是在循环中没有任何东西触发(是的,在我标记的for循环之前,数组是可见的,并且在代码开始之前填充了所有条件)。
我尝试在循环开始之前在变量中设置对象的值,但显然没有做任何事情。
作为参考,toFilterParams
设置为{games: [], entry: [], dates: []};
下面是代码,其中标注了我可以访问数组的位置以及对象值以及我无法访问的位置:
db = _.without(_.map(dbTransition, function(obj){
if("Starting_Date" in obj){
if(toFilterParams.games.length > 0){
// repeat of code I have below
} else if(toFilterParams.games.length === 0){
// Have access to obj["Entry Fee"] and toFilterParams.entry array**
if(toFilterParams.entry.length > 0){
// Have access to obj["Entry Fee"] and toFilterParams.entry array**
for(var x = 0, xx = toFilterParams.entry; x < xx; x++){
// Have no access to obj["Entry Fee"] and toFilterParams.entry array aka the loop here doesn't initiate.**
if(Number(toFilterParams.entry[x]) !== Number(obj["Entry Fee"])){
if(toFilterParams.dates.length > 0){
var startDate = Date.parse(toFilterParams.dates[0]);
var endDate = Date.parse(toFilterParams.dates[1]);
var FinalDate = Date.parse(obj["Starting_Date"]);
if(FinalDate >= startDate && FinalDate <= endDate){
return obj;
}
} else{
return obj;
}
}
}
} else if(toFilterParams.entry.length === 0){
if(toFilterParams.dates.length > 0){
var startDate = Date.parse(toFilterParams.dates[0]);
var endDate = Date.parse(toFilterParams.dates[1]);
var FinalDate = Date.parse(obj["Starting_Date"]);
if(FinalDate >= startDate && FinalDate <= endDate){
return obj;
}
} else{
return obj;
}
}
}
}
}), undefined);
所以基本上,我不知道发生了什么,并希望有任何帮助来解决这个问题。感谢。
答案 0 :(得分:2)
永远不会执行for
循环。发生这种情况,因为toFilterParams.entry
是一个数组。在for
循环的情况下,您需要检查数组。要解决此问题,您需要将数组的长度设置为xx
而不是数组本身:
for(var x = 0, xx = toFilterParams.entry.length; x < xx; x++){...