【问题标题】:Use Random from multiple variables in Javascript在Javascript中使用多个变量中的随机数
【发布时间】:2017-03-29 06:05:23
【问题描述】:

在一个函数中,我有这样的语句。

 Math.random() > 0.5 ? 'spikes' : 'slime' 

我想再添加一个变量,让程序随机选择这 3 个变量中的一个。让我们称之为“石头” 如何更改语句以随机选择三者之一? 我不想使用数组来做到这一点。 任何帮助,将不胜感激。 这是开源代码的一部分,我是初学者,因此难以理解。

【问题讨论】:

  • var random = Math.random() 然后使用if/else 链来选择结果(如果你只想要三个或四个东西)或者switch(任何数字)。
  • 如果其他则使用如果其他则使用
  • “我不想使用数组来做这件事” - 为什么不呢?这是最直接的方法。如果你不想要最直接的方法,有无数种方法可以让它变得更困难,但你为什么要呢?
  • 阵列采样将是解决此问题的最佳方法。
  • 如果您对特定代码有特定问题,请将该代码发布到问题中。不要围绕它提出没有意义的广泛问题。典型的 XY 问题。

标签: javascript arrays function variables random


【解决方案1】:

数组是最好的选择:

var result = ['spikes', 'slime', 'stone'][Math.floor(Math.random() * 3)];

console.log(result);

switch/case 将是一个可行的选项,尽管您可以看到所需的代码量与带有数组的代码量:

function getRandom() {
  var num = Math.floor(Math.random() * 3);

  switch (num) {
    case 0:
      return 'spikes';

    case 1:
      return 'slime';

    default:
      return 'stone';
  }

}

console.log(getRandom());

【讨论】:

  • 我会将随机数生成内联到switch (...),但这是一个小问题……
  • 它没有回答这个问题。他(操作用户)想要访问在作用域中声明的变量。
  • @Someone Wut?你是从哪里得到这个想法的?
  • @deceze 首先,我不同意 op 目标的想法,但是这个答案没有回答它,它只是建议使用一些东西(“对象”)。
  • @Someone 这就是标题给人的印象,但该示例使用简单的字符串,我认为操作只是混淆了他们的术语。
【解决方案2】:

数组是最流畅的方法。只需拥有一个包含可用选项的数组并对其进行采样。

Array.prototype.sample = function() {
  return this[Math.floor(Math.random() * this.length)];
}

// example without dirtying Array.prototype
function sampleArray(arr) {
  return arr[Math.floor(Math.random() * arr.length)];
}

var array = ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight'];

document.write([array.sample(), sampleArray(array)].join('<br />'));

【讨论】:

  • 它没有回答问题。
  • @Someone 我认为您严重误解了这里实际询问的,您应该在否决每个人之前解决这个问题。
  • @deceze 但是当我比其他人更好地回答问题时,我总是被否决。这就是为什么我没有回答这个问题。我回答正确。操作标题的意思是“变量”,而不是“对象”或相关事物。
  • @Someone 不要因为你被否决而投反对票。我读了这个问题,我觉得我的回答正确地解决了它。
  • 另一方面,我认为这个答案是正确的,但我会提出一个小的改进Math.ceil(Math.random() * arr.length) % arr.length -> Math.floor(Math.random() * arr.length)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-17
  • 1970-01-01
  • 2022-01-09
  • 1970-01-01
  • 2016-11-25
  • 2016-04-15
  • 1970-01-01
相关资源
最近更新 更多