Javascript если еще заявление со случайными переменными - PullRequest
0 голосов
/ 04 июня 2018

Я читал о системе лут-боксов и хотел создать свой собственный калькулятор счастливых чисел.

У меня есть 2 массива, один с обычными числами и один с выигрышными.Два числа будут помещены в переменную, и если оба эти числа будут в выигрышном массиве, вы выиграете!

Теперь я борюсь с тем, чтобы, когда я делаю числа случайными, мой оператор if else неработать больше.Он всегда будет говорить «ложь», даже если числа верны.

Если вы объявляете переменные не случайными, это работает (это показано в приведенном ниже коде).

Как я могу сделатьif else оператор, работающий с генератором случайных чисел?

CODE:

function go(){

var Numbers = ['one', 'two', 'three','four','five'];
var LuckyNumbers = ['three', 'four', 'seven']

var num1, num2;

num1 = Numbers.splice(Math.floor(Math.random() * Numbers.length), 1);//This doesnt work..
num2 = Numbers.splice(Math.floor(Math.random() * Numbers.length), 1);//This doesnt work..

// num1 ="three"; -> this works but it is not random
// num2 ="four";  -> this works but it is not random

if([num1, num2].every(item => LuckyNumbers.includes(item))) { //always false when using the randoms.
  console.log("yep")
} else{
  console.log('nope') 
}

}

Ответы [ 3 ]

0 голосов
/ 04 июня 2018

Это никак не связано с вашим if заявлением.num1 и num2 не хранят то, что, по вашему мнению, они хранят в вашем коде, как написано.

Array.prototype.splice возвращает удаленные элементы в новом массиве.Даже если есть только один, вам нужно сослаться на него по индексу 0:

var Numbers = ['one', 'two', 'three','four','five'];
var LuckyNumbers = ['three', 'four', 'seven']

var num1, num2;

num1 = Numbers.splice(Math.floor(Math.random() * Numbers.length), 1)[0];
num2 = Numbers.splice(Math.floor(Math.random() * Numbers.length), 1)[0];

if([num1, num2].every(item => LuckyNumbers.includes(item))) {
  console.log("yep")
} else{
  console.log('nope') 
}

Редактировать: В интересах дать вам более полный ответ - обратите внимание, что здесь используется spliceне так много проблем, как другие, кажется, указывают.Да, он изменяет массив Numbers, но массив Numbers создается заново каждый раз, когда вы вызываете функцию go.

В этом случае это вполне разумный способ решения этой проблемы, хотяесли вы когда-нибудь захотите провести рефакторинг своего кода таким образом, чтобы Numbers и LuckyNumbers были сохранены в некоторой родительской области, вам нужно знать о мутациях:

const Numbers = ['one', 'two', 'three','four','five'];
const LuckyNumbers = ['three', 'four', 'seven']

function go() {
    // Slice with no arguments creates a clone of an array...
    var numbers = Numbers.slice();

    // Note I'm calling splice on `numbers` with a small `n` here...
    var num1 = numbers.splice(Math.floor(Math.random() * Numbers.length), 1)[0];
    var num2 = numbers.splice(Math.floor(Math.random() * Numbers.length), 1)[0];

    if([num1, num2].every(item => LuckyNumbers.includes(item))) {
      console.log("yep")
    } else{
      console.log('nope')
    }
}
0 голосов
/ 04 июня 2018

Массив, который вы используете для сравнения, на самом деле является вложенным массивом массивов, который должен быть плоским.Например: [['Five'], ['One']] не может быть сопоставлено, как вы это делали.Надеюсь, это поможет.

function go () {
  var Numbers = ['one', 'two', 'three', 'four', 'five']
  var LuckyNumbers = ['three', 'four', 'seven']

  var num1, num2

  num1 = Numbers.splice(Math.floor(Math.random() * Numbers.length), 1)
  num2 = Numbers.splice(Math.floor(Math.random() * Numbers.length), 1)

  if (flatten([num1, num2]).every(item => LuckyNumbers.includes(item))) {
    // always false when using the randoms.
    console.log('yep')
  } else {
    console.log('nope')
  }
}
go()

function flatten (arr) {
  return arr.reduce((accum, curr) => {
    if (Array.isArray(curr)) {
      return accum.concat(flatten(curr))
    } else {
      return accum.concat(curr)
    }
  }, [])
}
0 голосов
/ 04 июня 2018

Splice изменяет массивы и возвращает массив - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice

Просто используйте вместо этого индекс, если вам не нужны повторения, или используйте первый элемент.

function go(){

var Numbers = ['one', 'two', 'three','four','five'];
var LuckyNumbers = ['three', 'four', 'seven']

var num1, num2;

// with repetitions
num1 = Numbers[Math.floor(Math.random() * Numbers.length)];
num2 = Numbers[Math.floor(Math.random() * Numbers.length)];

//without repetitions
num1 = Numbers.splice(Math.floor(Math.random() * Numbers.length), 1)[0];
num2 = Numbers.splice(Math.floor(Math.random() * Numbers.length), 1)[0];

if([num1, num2].every(item => LuckyNumbers.includes(item))) { //always false when using the randoms.
  console.log("yep")
} else{
  console.log('nope') 
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...