Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 尝试以正确的方式学习循环_Javascript_Jquery_Node.js - Fatal编程技术网

Javascript 尝试以正确的方式学习循环

Javascript 尝试以正确的方式学习循环,javascript,jquery,node.js,Javascript,Jquery,Node.js,最近我一直在教我的self Node.JS,这很有趣。然而,我遇到了一个路障,这真的要了我的命。我逐渐意识到,我不能在JS中为循环绞尽脑汁。每当我使用for循环时,我都会使用jquery$.each()来节省我的时间。好吧,我不能依赖。我所尝试的每一件事,我都被困在试图把我的头绕成一圈。这就是我的工作 只是为了一些上下文,我一直在node.js中使用WebSocket。这很有趣!我从随处可见的标准聊天应用开始,现在我正在尝试构建一个多人Tic-Tac-Toe游戏。当玩家单击网格时,网格选项存储在

最近我一直在教我的self Node.JS,这很有趣。然而,我遇到了一个路障,这真的要了我的命。我逐渐意识到,我不能在JS中为循环绞尽脑汁。每当我使用for循环时,我都会使用jquery$.each()来节省我的时间。好吧,我不能依赖。我所尝试的每一件事,我都被困在试图把我的头绕成一圈。这就是我的工作

只是为了一些上下文,我一直在node.js中使用WebSocket。这很有趣!我从随处可见的标准聊天应用开始,现在我正在尝试构建一个多人Tic-Tac-Toe游戏。当玩家单击网格时,网格选项存储在node.js websocket服务器上的播放器对象内的列表中

我最后要做的是将挑选的电路板节点列表与可能的tic-tac-toe解决方案的主列表进行比较:

        //i'm sure this can be formatted better....
             var solutions = {
                'vert':{
                    1:[[0,0],[0,1],[0,2]],
                    2:[[1,0],[1,1],[2,1]],
                    3:[[2,0],[2,1],[2,2]]
                },
                'hor':{
                    1:[[0,0],[1,0],[2,0]],
                    2:[[0,1],[1,1],[2,1]],
                    3:[[0,2],[1,2],[2,2]]
                },
                'diag':{
                    1:[[0,0],[1,1],[2,2]],
                    2:[[2,0],[1,1],[0,2]]
                }
            };

    // player selected grid coordinates
            var player1 = {
                'picked':[[0,0],[1,1],[2,2]]
            };

// the big dumb function that I hate. 
function winCondition(solutions){
    var win = '';
    console.log('-------------------------------------------------------');
    if(win === ''){
        $.each(solutions, function(index, solution){
            $.each(solution, function(index, winCon){
                console.log('testing Win Condition ' + index,winCon);
                matches = 0;
                if(matches !== 3){
                    console.log('current match value = ' + matches);
                    $.each(winCon, function(index, gridSlot){
                        console.log('Testing ' + index,gridSlot);
                        $.each(player1.picked, function(index,gridChoice){
                            console.log('does '+ gridSlot + ' = ' + gridChoice);
                            if(gridSlot[0] == gridChoice[0] && gridSlot[1] == gridChoice[1]){
                                matches = matches + 1;
                                console.log('match! ' + matches + '/3 left');
                                if(matches == 3){
                                    win = true;
                                }
                            }
                        });
                    });
                }
            });
        });
    }
    if (win === true){
        return true;
    } else {
        return false;
    }
}
我在codepen中测试了一段时间,它似乎可以正常工作,除了缺少。每个服务器端


那么我怎样才能达到同样的结果呢。。。每次我看一个例子时,我的大脑总是上下颠倒。我肯定我把整个事情复杂化了,但我已经在这上面努力了几个小时了,我想我的脑子里有个地方出了问题

有趣的是,作为一种最佳实践,你可以选择,这会让你陷入困境。A,但对于您的情况,我建议在阵列本身上使用,如下所示:

var array = ['foo', 'bar', 'baz'];

array.forEach(function (element, index, array) {
    console.log(element, index, array);
}

这是一种与jQuery的
.each()
非常相似的方法,这将使转换更加简单。

看起来您对所有$都使用了相同的
索引
变量。每个变量都比前面的变量大。每个循环都有一个不同的变量,试试看!到底是什么让你在理解for循环时遇到了最大的问题。@dubemeneyekwe我想这就是我的来源。我知道很多Python和Powershell,在这两种语言中,循环看起来都相当简单。在python中,迭代数组就像“for i in list=>do stuff”一样简单,但当我查找JS的循环时,它看起来就像是“for”(i=0;ido stuff'发生了很多事情,当我开始深入研究嵌套数组时,这对我没有帮助。你应该指定不应该对*.in*数组中的*.in使用
。数组索引上的经典for循环非常好。有趣。我觉得我试过了,但也许我没有。我将用forEach再次尝试。@ajp15243非常好。我把这个问题修改得更清楚了。非常感谢。