【问题标题】:Not able to push data into array无法将数据推送到数组中
【发布时间】:2014-05-14 04:08:42
【问题描述】:

我试图了解井字游戏的逻辑,我几乎已经制定了逻辑,但是在将数据推送到数组时我被卡住了。这是我创建的小提琴。

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

让我向你解释整个事情!

我正在尝试使用表的 9 td 作为可能获胜的 8 行。为此,我根据它们在表中的位置为一些 tds 指定了一个类名。

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 中的类名。我想为每个用户保存行号,然后检查他是否有 3 个位置被填满。我需要 Array 部分的帮助。

谢谢!

【问题讨论】:

    标签: javascript jquery html arrays


    【解决方案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              
              }
         }
    }
    

    【讨论】:

      【解决方案2】:

      您的问题在这里:

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

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

      我认为您使用这段代码的目的是检查该值是否已经在数组中,在这种情况下我建议使用$.inArray

      【讨论】:

      • 哦,我从来没想过!嗯,或者不是那样,只是使用 if(user1.lenght != 0) { 进行长度检查?你认为什么会更好? :)
      • 如果你和我猜的一样,试图检查数组中是否存在,我会使用inarray
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-07
      • 2016-12-26
      • 1970-01-01
      • 2016-03-13
      • 1970-01-01
      相关资源
      最近更新 更多