无法访问我在条件语句/循环内部的循环内的数组或对象值没有启动

时间:2016-02-23 21:43:17

标签: javascript underscore.js

我的意思是"无法访问"是循环没有启动。对不起,感到困惑。

之前我曾问过这个问题,但我会再次尝试更多细节和完整代码。

基本上,我根据用户的输入过滤输出。但是,我很困惑为什么我无法访问上面代码中标记的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);

所以基本上,我不知道发生了什么,并希望有任何帮助来解决这个问题。感谢。

1 个答案:

答案 0 :(得分:2)

永远不会执行for循环。发生这种情况,因为toFilterParams.entry是一个数组。在for循环的情况下,您需要检查数组。要解决此问题,您需要将数组的长度设置为xx而不是数组本身:

for(var x = 0, xx = toFilterParams.entry.length; x < xx; x++){...