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

Accessing parameters from one loop in nested loop Javascript

本文关键字:一个 循环 访问 参数 Javascript 嵌套循环      更新时间:2023-09-26

我有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=10.RealCategory.tournaments.length>0时出现问题。比我从第三和第二循环中得到结果。如果第三个循环给我 2 个结果,我会得到我的 HTML 10 + 2 个结果,但我不想的只是 10 个结果。

如果您最多想要 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)

试试这个,这是一个快速解决方案。我在内部循环中增加了你的变量"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>');
                    }
                };
            });