2014-12-25 2 views
2

Я пытаюсь сделать игру Yahtzee. У меня есть функция, чтобы проверить, не сыграли ли кубики маленькую прямую.Функция Javascript, изменяющая глобальную переменную (массив)

var sortedDice = rollDice().sort(); // rollDice() generates an array with 5 random numbers 

Моя функция, чтобы определить, есть небольшой прямой:

function isSmStraight(checkSmStraight){ 
    var smStraight = false; 

    var i = 1; 
    var j = 0; 

    //will remove a die if there are duplicates 
    while(i < checkSmStraight.length){ 
     if (checkSmStraight[i] == checkSmStraight[j]){ 
      i++; 
     } else { 
      j++; 
      checkSmStraight[j] = checkSmStraight[i]; 
      i++; 
     }//end if else 
    }//end while loop that moves duplicates to last index of array 
    checkSmStraight.pop();//removes last index of array 

    if (isLgStraight(checkSmStraight) == true){ 
     smStraight = true; 
    } else if (checkSmStraight.length == 4 && checkSmStraight[checkSmStraight.length-1] - checkSmStraight[0] == 3){ 
     smStraight = true; 
    }//end if else if 
    return smStraight; 
}//end function isSmStraight() 

Я скопировал sortedDice в другой массив, fourDice, что я могу использовать для вызова isSmStraight(). Я хочу, чтобы эта функция использовала только четырехзначный массив, но она всегда беспорядочна с sortedDice, поэтому в остальной части программы используется массив из четырех кубиков. (Это не вся программа, только те части, которые, как я думал, релевантны. Кроме того, программа закончена, я просто пытаюсь сначала получить функции подсчета очков).

+0

Вы должны определить глобальный внешний вид, если ваша функция, например 'var newvar =" "; function test() {newvar = "новый текст"; } ' – Eugen

+0

Вы, вероятно, передаете ссылку, а не новый массив, используйте' .slice() 'для создания копии. – adeneo

+0

Да, глобальные переменные определяются вне функции. Использование .slice() отлично работает. Спасибо как за быстрые ответы. –

ответ

2

Массивы по умолчанию переданы в JavaScript. Так что если вы просто делаете что-то вроде var fourDice = sortedDice , а затем редактируете fourDice, sortedDice также будет отредактирован. Пожалуйста, также укажите код, в котором вы копируете sortedDice, в fourDice в вопросе.

+0

Это именно то, что я ошибался. Использование .slice() отлично работает. Теперь мне просто нужно выяснить, как отметить это как решение (новое для сайта). –

Смежные вопросы