Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有随机变量的Javascript if-else语句_Javascript_If Statement - Fatal编程技术网

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

带有随机变量的Javascript if-else语句,javascript,if-statement,Javascript,If Statement,我读了一本关于战利品箱系统的书,想做一个我自己的幸运数字计算器 我有两个数组,一个是正则数,另一个是中奖数。 两个数字将被放入一个变量中,如果这两个数字都在获胜的数组中,那么您将获胜 现在我正在努力解决的问题是,当我把这些数字变成随机数时,我的if-else语句就不起作用了。即使数字是正确的,它也总是说false 如果您声明变量不是随机的,那么它确实有效(如下代码所示) 如何使if-else语句与随机生成器一起工作 代码: }剪接突变数组并返回一个数组- 如果不关心重复,只需使用索引,或者使用第

我读了一本关于战利品箱系统的书,想做一个我自己的幸运数字计算器

我有两个数组,一个是正则数,另一个是中奖数。 两个数字将被放入一个变量中,如果这两个数字都在获胜的数组中,那么您将获胜

现在我正在努力解决的问题是,当我把这些数字变成随机数时,我的if-else语句就不起作用了。即使数字是正确的,它也总是说false

如果您声明变量不是随机的,那么它确实有效(如下代码所示)

如何使if-else语句与随机生成器一起工作

代码:


}

剪接突变数组并返回一个数组-

如果不关心重复,只需使用索引,或者使用第一个元素

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

这与您的
if
语句完全无关
num1
num2
没有存储您认为它们存储在您编写的代码中的内容

返回新数组中已删除的元素。即使只有一个,也需要在索引
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
数组,但是每次调用
go
函数时都会重新创建
Numbers
数组

在这种情况下,这是解决此问题的一种完全合理的方法,但如果您想要重构代码,使
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')
    }
}

用于比较的数组实际上是一个嵌套数组,它需要是平面数组。例:['5'],['1']]无法与你当时的做法相比。希望这有帮助

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)
    }
  }, [])
}

出于好奇-为什么要使用字符串
'one'
而不是数字
1
?splice从数组中删除数字…因为现在我想用数字试试,在以后的项目中还会有其他东西:)@gabi lee,但是它不会影响LuckyNumbers数组,对吗?它不会影响LuckyNumbers,因为他从未调用LuckyNumbers上的splice。现在我没有机会得到两个数字吗?这里可能会出现两个相同的数字,但您的案例仍然会通过。@walkingipad5-您是对的,我将编辑答案。我不明白这个问题。事实上,部分原因是它与if有关。因为他指的是比较['two',['four']],而不是['two','four']。但你的观点也是正确的。我只是想提一下。是的。我认为,根据变量名的语义,指出问题在于
num1
num2
没有存储OP认为它们正在存储的内容会更清楚。你可以改变if语句,但那将是可读性失败。事实上,我的想法与你最初的想法完全相同,但事实证明,他的答案唯一的问题是嵌套数组。每次检查。在这种情况下,他变异了正确的数组,这不会给他的最终答案带来问题。有趣的是,乍一看我们对它的看法都不一样!我要工作了,太棒了!非常有用的东西,伙计们。非常感谢^^不确定Mutagion有什么效果,我对JS很陌生,但我会去看看。
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)
    }
  }, [])
}