这是一个优雅的解决方案?

时间:2016-02-29 18:20:12

标签: javascript arrays random

问题并不复杂。从名称数组中随机记录名称。

我的解决方案就是这样。

var names = [ 'nick', 'rock', 'danieel' ];
function randPicker(names) {
    var randNum = Math.floor((Math.random() * 10));
    var name = randNum <= (names.length - 1) ? console.log(names[randNum]) : randPicker(arguments[0]); 
};

在我看来,这段代码并不那么漂亮,因为我非常确定有更好的方法可以更快地执行。这是真的吗?

3 个答案:

答案 0 :(得分:1)

更好的方法是让函数返回数组的随机元素并修复它的获取:

function randPicker(a) {
  return a[Math.random() * a.length | 0];
}

测试:

function randPicker(a) {
  return a[Math.random() * a.length | 0];
}

var names = ['nick', 'rock', 'danieel'];

for (var q=0; q<16; ++q) {
  console.log(randPicker(names));
}

答案 1 :(得分:1)

您可以立即获取randNum以获取姓名:

var names = [ 'nick', 'rock', 'danieel' ];
function randPicker(names) {
    var randNum = Math.floor((Math.random() * names.length));
    var name = console.log(names[randNum]); 
};

答案 2 :(得分:0)

您可以使用

var names = [ 'nick', 'rock', 'danieel' ];

function randomPicker(names) {
 return names[Math.floor(Math.random() * (names.length+1))];
}

<强>解释

Math.random()返回范围[0,1]中的数字 将其乘以array + 1的长度,以获得范围[0,长度]中的数字和小数。 最后使用Math.floor将其舍入为整数。