首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >带有随机变量的Javascript if else语句

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

Stack Overflow用户
提问于 2018-06-05 03:54:05
回答 3查看 502关注 0票数 1

我读到了一个奖品箱系统,想做一种属于我自己的幸运数字计算器。

我有两个数组,一个是正则数组,另一个是胜出数组。两个数字将被放入一个变量中,如果这两个数字都在获胜的数组中,你就赢了!

现在我正在努力解决的是,当我把数字随机的时候,我的if else语句就不再起作用了。即使这些数字是正确的,它也总是会显示false。

如果你声明变量不是随机的,它就会起作用(如下面的代码所示)。

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

代码:

代码语言:javascript
复制
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') 
}

}

EN

回答 3

Stack Overflow用户

发布于 2018-06-05 04:04:22

这与您的if语句一点关系都没有。num1num2并没有按照你所写的那样存储在你的代码中。

Array.prototype.splice在一个新数组中返回被删除的元素。即使只有一个,也需要在索引0中引用它

代码语言:javascript
复制
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数组。

在这种情况下,这是解决这个问题的一种完全合理的方法,不过,如果您想重构代码,以便将NumbersLuckyNumbers存储在某个父作用域中,则需要注意其中的变化:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2018-06-05 04:01:58

Splice变异数组并返回数组- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice

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

代码语言:javascript
复制
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') 
}
}
票数 0
EN

Stack Overflow用户

发布于 2018-06-05 04:15:36

你用来比较的数组实际上是一个嵌套的数组,它需要是平面的。例:[‘五’,‘一’]你做这件事的方式是无法与之相比的。希望这能有所帮助。

代码语言:javascript
复制
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)
    }
  }, [])
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50687890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档