Javascript 尝试以正确的方式学习循环
最近我一直在教我的self Node.JS,这很有趣。然而,我遇到了一个路障,这真的要了我的命。我逐渐意识到,我不能在JS中为循环绞尽脑汁。每当我使用for循环时,我都会使用jquery$.each()来节省我的时间。好吧,我不能依赖。我所尝试的每一件事,我都被困在试图把我的头绕成一圈。这就是我的工作 只是为了一些上下文,我一直在node.js中使用WebSocket。这很有趣!我从随处可见的标准聊天应用开始,现在我正在尝试构建一个多人Tic-Tac-Toe游戏。当玩家单击网格时,网格选项存储在node.js websocket服务器上的播放器对象内的列表中 我最后要做的是将挑选的电路板节点列表与可能的tic-tac-toe解决方案的主列表进行比较:Javascript 尝试以正确的方式学习循环,javascript,jquery,node.js,Javascript,Jquery,Node.js,最近我一直在教我的self Node.JS,这很有趣。然而,我遇到了一个路障,这真的要了我的命。我逐渐意识到,我不能在JS中为循环绞尽脑汁。每当我使用for循环时,我都会使用jquery$.each()来节省我的时间。好吧,我不能依赖。我所尝试的每一件事,我都被困在试图把我的头绕成一圈。这就是我的工作 只是为了一些上下文,我一直在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;i。数组索引上的经典for循环非常好。有趣。我觉得我试过了,但也许我没有。我将用forEach再次尝试。@ajp15243非常好。我把这个问题修改得更清楚了。非常感谢。