如何在Javascript或Jquery中从数组中选择随机值?

时间:2016-06-12 06:16:56

标签: javascript jquery

我试图从数组中显示3个随机值。以下脚本只返回javaScript数组中的单个项目。

arrayNum

但是我希望从数组@RequestParam中显示三个随机值,任何人都可以指导我是否可以使用javascript从数组中获取3个唯一的随机值?如果有人指导我,我将不胜感激。谢谢

4 个答案:

答案 0 :(得分:7)

我将假设您正在询问如何在当前数组中使用由三个元素组成的新数组。

如果你不注意重复的可能性,你可以做一些简单的事情,如下面的getThree

但是,如果您不希望重复值,则可以使用getUnique



var arrayNum = ['One', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'];  

function getThree() {
  return  [
    arrayNum[Math.floor(Math.random() * arrayNum.length)],
    arrayNum[Math.floor(Math.random() * arrayNum.length)],
    arrayNum[Math.floor(Math.random() * arrayNum.length)]
  ];
    
}


function getUnique(count) {
  // Make a copy of the array
  var tmp = arrayNum.slice(arrayNum);
  var ret = [];
  
  for (var i = 0; i < count; i++) {
    var index = Math.floor(Math.random() * tmp.length);
    var removed = tmp.splice(index, 1);
    // Since we are only removing one element
    ret.push(removed[0]);
  }
  return ret;  
}
console.log(getThree());

console.log("---");
console.log(getUnique(3));
&#13;
&#13;
&#13;

答案 1 :(得分:2)

您可以尝试这样的事情:

逻辑:

  • 创建临时数组,使其不替换原始值。
  • 计算随机数并使用% array.length查找正确的索引。
  • 使用array.splice(index, 1)从临时数组中删除元素,以便它不会重复。

&#13;
&#13;
var arrayNum = ['One', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'];  

function getRandomValues(arr, count){
  var result = [];
  var _tmp = arr.slice();
  for(var i = 0; i<count; i++){
    var index = Math.ceil(Math.random() * 10) % _tmp.length;
    result.push(_tmp.splice(index, 1)[0]);
  }
  return result;
}

console.log(getRandomValues(arrayNum, 3))
&#13;
&#13;
&#13;

答案 2 :(得分:1)

使用for()迭代随机选择

&#13;
&#13;
var arrayNum = ['One', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'];  
var selected = [];
for (var i = 0; i < 3; i++){
    selected[i] = arrayNum[Math.floor(Math.random() * arrayNum.length)];
}
console.log(selected);
&#13;
&#13;
&#13;

如果要选择不同的项目,则需要在插入新数组之前检查所选项目。

&#13;
&#13;
var arrayNum = ['One', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'];  
var selected = [];
for (var i = 0; i < 3; i++){
    rand();
}
console.log(selected);

function rand(){
    var ran = arrayNum[Math.floor(Math.random() * arrayNum.length)];  
    if (selected.indexOf(ran) == -1)
        selected.push(ran);
    else
         rand();
}
&#13;
&#13;
&#13;

答案 3 :(得分:0)

您可以这样做:

var arrayNum = ['One', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'];

var singleRandom = [];

for (var i = 0; i < 3; i++) {

  singleRandom.push(Math.floor(Math.random() * arrayNum.length));

}

console.log(arrayNum[singleRandom[0]]);
console.log(arrayNum[singleRandom[1]]);
console.log(arrayNum[singleRandom[2]]);