我读到了一个奖品箱系统,想做一种属于我自己的幸运数字计算器。
我有两个数组,一个是正则数组,另一个是胜出数组。两个数字将被放入一个变量中,如果这两个数字都在获胜的数组中,你就赢了!
现在我正在努力解决的是,当我把数字随机的时候,我的if else语句就不再起作用了。即使这些数字是正确的,它也总是会显示false。
如果你声明变量不是随机的,它就会起作用(如下面的代码所示)。
如何使if else语句与随机生成器一起工作?
代码:
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')
}
}
发布于 2018-06-05 04:04:22
这与您的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
数组,但每次调用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')
}
}
发布于 2018-06-05 04:01:58
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')
}
}
发布于 2018-06-05 04:15:36
你用来比较的数组实际上是一个嵌套的数组,它需要是平面的。例:[‘五’,‘一’]你做这件事的方式是无法与之相比的。希望这能有所帮助。
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)
}
}, [])
}
https://stackoverflow.com/questions/50687890
复制相似问题