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