2012-01-31 4 views
-1

Мой полный код:

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"); 
     } 

    }); 
}); 

так это работает. Если бы я установил число до 5, он оповещает «есть», а для 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. 
}); 

Я так растерялся, чтобы пытаться решить эту проблему в течение нескольких часов.

+3

Почему во имя бога вы сравнивая результат 'inArray' на ** строки ** ?! –

+2

Кроме того, зачем инициализировать массив со значениями, которые вы собираетесь переписать сразу после этого? –

+0

потому что я программирую TicTacToe (против ПК). там 1-е место игроков будет сохранено в массиве. и элементы в этом массиве будут проверяться с помощью комбинации. затем я беру комбинацию, программирую ее, так что ПК отвечает и играет логически. –

ответ

0

Конкретная проблема с кодом, который вы просите о том, что ты превращаешься значение в строку перед проверкой:

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

inArray делает === (строгое равенство) проверить, и "1" !== 1 , Эта строка должна гласить:

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

Изменения:

  1. Не включайте value в строку.

  2. Сравните результат с -1 (число), а не "-1" (строка). inArray возвращает число.

  3. Используйте !==, а не != (это в основном вопрос стиля, вы можете использовать !=, если хотите).


Есть несколько других проблем с этим кодом, хотя.

  1. Вы не нашли }, поэтому код, который вы говорите, ваш полный код не разобрать.

  2. Вы воссоздаете Combinationкаждый раз, когда называется combinationCheck. Если ваша цель - создать игру Tic-Tac-Toe, вам нужно будет удержать состояние Combination между проверками.

Вот довольно минимальный набор исправлений:

(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

+0

Хмм .. я пробовал, но все же не работает для меня. У меня есть тот же код, который вы написали –

+0

@ Freetalk13: * «У меня есть тот же самый код, который вы написали» * По-видимому, нет, поскольку он работает (см. Прямую ссылку). Единственное, что я могу придумать, это то, что есть что-то * еще *, не связанное с цитируемым кодом, что предотвращает его запуск вообще. Посмотрите в консоли JavaScript на наличие ошибок. –