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

新手上路,请多包涵

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

 var arrayNum = ['One', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'];
var singleRandom = arrayNum[Math.floor(Math.random() * arrayNum.length)];
alert(singleRandom);

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

原文由 Ayaz Ali Shah 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 361
2 个回答

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

如果您不介意重复的可能性,您可以做一些简单的事情,例如: 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));

原文由 Jeremy J Starcher 发布,翻译遵循 CC BY-SA 3.0 许可协议

你可以尝试这样的事情:

逻辑:

  • 创建一个临时数组,使其不会替换原始值。
  • 计算随机数并使用 % array.length 找到正确的索引。
  • 使用 array.splice(index, 1) 从临时数组中删除元素,这样它就不会重复。
 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))

原文由 Rajesh 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题