在嵌套循环Javascript中从一个循环访问参数

时间:2016-03-05 19:50:45

标签: javascript

我有3个循环

$.each(results.doc, function(index, element){
                for(var i=0; i < self.options.maxMatches; i++){
                    var RealCategory = this.data[0]['realcategories'][i];
                    var realcategoryName = RealCategory.name;
                    for(var j = 0; j< RealCategory.tournaments.length; j++){
                        var tournamentName = RealCategory.tournaments[j].name
                        self.append('<li>' + realcategoryName+' / '+i+' - '+tournamentName+' / '+j+' </li>');
                    }
                };
            });

self.options.maxMatches我决定在HTML中显示多少结果。让我们说self.options.maxMatches=10RealCategory.tournaments.length>0时会出现问题。比我得到第三和第二循环的结果。如果第三个for循环得到2个结果我得到我的HTML 10 + 2结果,但我想它只有10个结果。

2 个答案:

答案 0 :(得分:2)

如果您最多需要maxMatches<li>个(或tournaments),那么您将要从一个索引器中保留一个单独的计数器并退出循环基于此。

var limit = self.options.maxMatches;
$.each(results.doc, function () {
    // ...
    for (var i = 0; i < categories.length; i++) {
        // ...
        for (var j = 0; j < RealCategory.tournaments.length; j++) {
            // ...

            limit--;
            if (limit <= 0) {
                // exit iterator `function`, interrupting both `for` loops
                // `false` to instruct jQuery to not continue looping
                return false;
            }
        }
    }
});

maxMatches目前仅限制realcategories的数量。但是,每个都有tournaments未知数(可能0,可能5等。)

2种可能的情况:

i               | 0 | 1 | 2 | 3 | 4 | (e.g. maxMatches = 5)
tournaments (A) | 3 | 0 | 1 | 2 | 1 | (total = 7)
tournaments (B) | 0 | 1 | 1 | 0 | 0 | (total = 2)

答案 1 :(得分:0)

试试这个,这是一个快速修复。我在内部循环中增加了你的变量'i'(尽管这个代码可以用更好的方式编写)

$.each(results.doc, function(index, element){
                for(var i=0; i < self.options.maxMatches; ){
                    var RealCategory = this.data[0]['realcategories'][i];
                    var realcategoryName = RealCategory.name;
                    for(var j = 0; j< RealCategory.tournaments.length; j++){
                        i++;
                        var tournamentName = RealCategory.tournaments[j].name
                        self.append('<li>' + realcategoryName+' / '+i+' - '+tournamentName+' / '+j+' </li>');
                    }
                };
            });