我读到了一个战利品盒系统,想要制作我自己的幸运数字计算器。
我有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')
}
}
答案 0 :(得分:1)
这完全与您的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')
}
}
答案 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)
}
}, [])
}