无法将数据推送到数组中

时间:2014-05-13 19:38:23

标签: javascript jquery html arrays

我试图了解Tic Tac Toe游戏的逻辑,我几乎已经做了一个逻辑,但是在将数据推送到数组时我被困住了。这是我创造的小提琴。

http://jsfiddle.net/afzaal_ahmad_zeeshan/6bgjp/1/

让我向你解释一切!

我正在尝试使用表格的9 td作为可能获胜的8行。为此,我给了一些tds一个className,具体取决于它们在表中的位置。

HTML很简单

<div class="vicvacvoe">
    <table>
        <tr>
            <td class="line1 line4 line7"></td>
            <td class="line1 line5"></td>
            <td class="line1 line6 line8"></td>
        </tr>
        <tr>
            <td class="line2 line4"></td>
            <td class="line2 line5 line7 line8"></td>
            <td class="line2 line6"></td>
        </tr>
        <tr>
            <td class="line3 line4 line8"></td>
            <td class="line3 line5"></td>
            <td class="line3 line6 line7"></td>
        </tr>
    </table>
</div>

只是一个包含9个tds的简单表格,CSS与此无关,所以请保留它。

jQuery也很简单。但我无法将数据推送到数组。

var vic = $('.vicvacvoe table tr td');
    var player = 1;
    var tick = '✓';
    var cross = 'X';
    var user1 = [];
    var user2 = [];
    vic.click(function () {
        var className = $(this).attr('class');
        if (className != 'dead') {
            // A new board place to write on...
            // Now do the processes here...
            if (player == 1) {
                // First player!
                var cArray = className.split(' ');
                for (i = 0; i < cArray.length; i++) {
                    for (j = 0; j < user1.length; j++) {
                        // check for each class
                        if (user1[j] != cArray[i]) {
                            user1.push(cArray[i]);
                        }
                    }
                }
            } else {
                /* code for second player, the same */
            }
            $(this).text('Works!');
            $(this).attr('class', 'dead');
        }
    });

这是整个jQuery脚本。实际上,当我运行代码时,它确实会到达堆栈的末尾(对于类属性更改脚本)并且它会锁定td以进行进一步处理,并且它也会在td中写入 Works!。但我无法为该用户获取Array内的classNames。我想保存每个用户的行号,然后检查他是否填充了3个点。我需要有关Array部分的帮助。

谢谢!

2 个答案:

答案 0 :(得分:1)

我更喜欢简单,所以您可以使用indexOf检查该类是否已经在用户的数组中,如下所示:

if (player == 1) {
     // First player!
     var cArray = className.split(' ');
     for (i = 0; i < cArray.length; i++) {
          if(user1.indexOf(cArray[i]) == -1) {
               user1.push(cArray[i]);
          } else {
               // css class is already in the array              
          }
     }
}

答案 1 :(得分:0)

您的问题在这里:

for (j = 0; j < user1.length; j++) {

您添加到user1数组的唯一位置是在此循环中。现在数组最初是空的,所以很明显这个循环永远不会迭代,因为user1.length总是为0。

我认为你对这段代码的意图是检查数值是否已经在数组中,我建议使用$.inArray