无法在条件语句/循环不启动的循环内访问数组或对象值
Can't access array or object value inside a loop that I have inside conditional statement/ Loop doesn't initiate
我所说的 "can't access" 是指循环没有启动。抱歉造成混淆。
我之前问过这个问题,但我再次尝试提供更多细节和完整的代码。
基本上,我是根据用户的输入过滤输出。但是,我很困惑为什么我无法访问我在上面代码中标记的 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);
所以基本上,我不知道发生了什么,希望得到任何帮助来解决这个问题。谢谢。
for
循环永远不会执行。发生这种情况,因为 toFilterParams.entry
是一个数组。在 for
循环的条件下,您正在检查数组。要解决此问题,您需要将数组的长度设置为 xx
而不是数组本身:
for(var x = 0, xx = toFilterParams.entry.length; x < xx; x++){...
我所说的 "can't access" 是指循环没有启动。抱歉造成混淆。
我之前问过这个问题,但我再次尝试提供更多细节和完整的代码。
基本上,我是根据用户的输入过滤输出。但是,我很困惑为什么我无法访问我在上面代码中标记的 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);
所以基本上,我不知道发生了什么,希望得到任何帮助来解决这个问题。谢谢。
for
循环永远不会执行。发生这种情况,因为 toFilterParams.entry
是一个数组。在 for
循环的条件下,您正在检查数组。要解决此问题,您需要将数组的长度设置为 xx
而不是数组本身:
for(var x = 0, xx = toFilterParams.entry.length; x < xx; x++){...