$ .each和jQuery.inArray函数组合的奇怪输出

时间:2012-01-31 09:19:38

标签: jquery arrays each utilities

我的完整代码:

jQuery.extend({

combinationCheck: function (p1position) {

    var Combination = [1, 2, 3, 4, 5, 6, 7, 8];
    Combination[0] = [1, 2, 3];
    Combination[1] = [4, 5, 6];
    Combination[2] = [7, 8, 9];
    Combination[3] = [1, 4, 7];
    Combination[4] = [2, 5, 8];
    Combination[5] = [4, 6, 8];
    Combination[6] = [1, 5, 9];
    Combination[7] = [3, 5, 7];


    $.each(p1position, function (index, value) {

        var num = value;

        if ($.inArray(String(value), Combination[1]) != '-1') {
            alert("there");
        }
        else {
            alert("not there");
        }

    });
});

所以它有效。如果我将num设置为5,则警告“is there”,并且8 - > “不在那里”。 但问题是我有另一个阵列。

p1position = [1,5];

并浏览数组..

$.each(p1position,function(index,value){
    var num = value;
//then call the jQuery.inArray function as written above, it always return not there. even though 5 is in the Combination[1] array.
});

我很困惑,试图解决这个问题几个小时。

1 个答案:

答案 0 :(得分:0)

您要问的代码的具体问题是您在检查之前将值转换为字符串:

if ($.inArray(String(value), Combination[1]) != '-1') {
//            ^^^^^^^^^^^^^

inArray执行===(严格相等)检查,"1" !== 1。该行应为:

if ($.inArray(value, Combination[1]) !== -1) {

的变化:

  1. 请勿将value变为字符串。

  2. 将结果与-1(数字)进行比较,而不是"-1"(字符串)。 inArray会返回一个数字。

  3. 使用!==而不是!=(这主要是时尚问题,如果您愿意,可以使用!=。)


  4. 但该代码存在多个其他问题。

    1. 您错过了},因此您说的代码是完整代码无法解析的。

    2. 每次调用Combination时,您都会重新创建combinationCheck 。如果你的目标是创建一个Tic-Tac-Toe游戏,那么你需要能够在两次检查之间保持Combination状态。

    3. 这是一组相当少的修复:

      (function() {
          var Combination = [
                  [1, 2, 3],
                  [4, 5, 6],
                  [7, 8, 9],
                  [1, 4, 7],
                  [2, 5, 8],
                  [4, 6, 8],
                  [1, 5, 9],
                  [3, 5, 7]
              ];
      
          jQuery.extend({
      
              combinationCheck: function (p1position) {
      
                  $.each(p1position, function (index, value) {
      
                      if ($.inArray(value, Combination[1]) !== -1) {
                          alert(value + " is there");
                      }
                      else {
                          alert(value + " is NOT there");
                      }
      
                  });
              }
          });
      
      })();
      

      ......给出了:

      jQuery.combinationCheck([1, 5]);
      

      ...报告找不到1,但5是。

      Live copy