【问题标题】:Math.random returning same value when console logged javascript [duplicate]控制台记录javascript时,Math.random返回相同的值[重复]
【发布时间】:2022-01-15 12:34:45
【问题描述】:

这是我的代码

// import user input prompt 
var inquirer = require('inquirer');
var emptyFamArray = [];

// ask the user how many relatives do they have

const getQuestions = () => {
    inquirer.prompt([
      {
        name: "relatives_names",
        type: 'input',
        message: "Please input family first names seperated by a space. only 1-10 family members please!",
        
    },
    ]).then((answers => {
        // console.log(answers)
        let test1 = JSON.stringify(answers.relatives_names).split(' ');
        // console.log(test1);
       
        let randomArrayName = test1[Math.floor(test1.length * Math.random())]
        let randomArrayNameTwo = test1[Math.floor(test1.length * Math.random())]
        console.log(randomArrayName)
    
  
        if(test1.length > 10){
            console.log('to many names please input 10 or less')
        } else if (test1.length == 9){

           
            console.log(randomArrayName + " Gets " + randomArrayNameTwo + " for christmas pickings!");
        
         
        }else if (test1.length == 5){
            console.log(randomArrayName + " Gets " + randomArrayNameTwo + " for christmas pickings!");
            console.log(randomArrayName + " Gets " + randomArrayNameTwo + " for christmas pickings!");
            console.log(randomArrayName + " Gets " + randomArrayNameTwo + " for christmas pickings!");
            console.log(randomArrayName + " Gets " + randomArrayNameTwo + " for christmas pickings!");
            console.log(randomArrayName + " Gets " + randomArrayNameTwo + " for christmas pickings!");
          

当它在控​​制台记录时,它会随机化名称,但它只会一遍又一遍地返回相同的值

例子

kylee Gets gerald for christmas pickings!
kylee Gets gerald for christmas pickings!
kylee Gets gerald for christmas pickings!

我将如何解决这个问题?我卡住了,不完全确定每次登录时如何使变量随机化

谢谢

【问题讨论】:

  • 您多次引用randomArrayNamerandomArrayNameTwo,但这些绑定只设置一次。为什么你认为它们会有所不同?

标签: javascript node.js arrays if-statement


【解决方案1】:

当您打印到控制台时,随机选择已经发生,并且仅发生在 您打印出名称之前。 要使其每次选择一个随机名称,请将选择转换为每次要打印到控制台时都会调用的函数。例如:

var selectRandomName = function(names) {
 return names[Math.floor(names.length * Math.random())]
}

console.log(selectRandomName(names) + " GETS " + selectRandomName(names) + " for Christmas pickings!");

显然这过于简单了,您可能还应该防止两次选择相同的名称和其他类似情况,但这超出了当前问题的范围。我认为这是某种练习,因为在现实世界的应用程序中,您应该使用一些现成的匹配库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-16
    • 1970-01-01
    • 1970-01-01
    • 2018-06-06
    • 2015-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多