带有随机变量的Javascript if else语句

时间:2018-06-04 19:54:05

标签: javascript if-statement

我读到了一个战利品盒系统,想要制作我自己的幸运数字计算器。

我有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 :(得分:1)

这完全与您的if声明无关。 num1num2并未存储您认为存储在代码中的内容。

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数组。

在这种情况下,这是一种解决此问题的完全合理的方法,但如果您想重构代码以使NumbersLuckyNumbers存储在某个父作用域中,则需要要意识到突变:

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')
    }
}

答案 1 :(得分:0)

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') 
}
}

答案 2 :(得分:0)

用于比较的数组实际上是一个需要平坦的嵌套数组。例如:[['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)
    }
  }, [])
}