Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从JavaScript数组中获取随机项_Javascript_Arrays_Random - Fatal编程技术网

从JavaScript数组中获取随机项

从JavaScript数组中获取随机项,javascript,arrays,random,Javascript,Arrays,Random,如何从items中获取随机项?jQuery是JavaScript!它只是一个JavaScript框架。因此,要查找随机项,只需使用普通的旧JavaScript,例如 var items = Array(523, 3452, 334, 31, ..., 5346); var random = items[Math.floor(Math.random()*items.length)] 学分: 如果您确实必须使用jQuery来解决此问题(注意:您不应该): 如果给定一个数组,或者[0..n]中的一

如何从
items
中获取随机项?

jQuery是JavaScript!它只是一个JavaScript框架。因此,要查找随机项,只需使用普通的旧JavaScript,例如

var items = Array(523, 3452, 334, 31, ..., 5346);
var random = items[Math.floor(Math.random()*items.length)]
学分:

如果您确实必须使用jQuery来解决此问题(注意:您不应该):

如果给定一个数组,或者[0..n]中的一个值给定一个数字,或者给定任何其他值,这个插件将返回一个随机元素,一个保证的随机值

为了增加乐趣,数组返回是根据数组的长度递归调用函数生成的:)


进行演示另一种方法是向阵列原型添加一种方法:

(function($) {
    $.rand = function(arg) {
        if ($.isArray(arg)) {
            return arg[$.rand(arg.length)];
        } else if (typeof arg === "number") {
            return Math.floor(Math.random() * arg);
        } else {
            return 4;  // chosen by fair dice roll
        }
    };
})(jQuery);

var items = [523, 3452, 334, 31, ..., 5346];
var item = jQuery.rand(items);
使用下划线(或loDash:):

或者要洗牌整个阵列:

var randomArray = [
   '#cc0000','#00cc00', '#0000cc'
];

// use _.sample
var randomElement = _.sample(randomArray);

// manually use _.random
var randomElement = randomArray[_.random(randomArray.length-1)];
较短:

// 1. Random shuffle items
items.sort(function() {return 0.5 - Math.random()})

// 2. Get first item
var item = items[0]

还有另一种方法:

const ArrayRandomModule = {
  // get random item from array
  random: function (array) {
    return array[Math.random() * array.length | 0];
  },

  // [mutate]: extract from given array a random item
  pick: function (array, i) {
    return array.splice(i >= 0 ? i : Math.random() * array.length | 0, 1)[0];
  },

  // [mutate]: shuffle the given array
  shuffle: function (array) {
    for (var i = array.length; i > 0; --i)
      array.push(array.splice(Math.random() * i | 0, 1)[0]);
    return array;
  }
}
或按照以下建议:


1.解决方案:定义阵列原型

Array.prototype.random=函数(){
返回此[Math.floor((Math.random()*this.length));
}
这将适用于内联数组

[2,3,5].random()
当然还有预定义的数组

var列表=[2,3,5]
list.random()
2.解决方案:定义接受列表并返回元素的自定义函数

函数get_random(列表){ 返回列表[Math.floor((Math.random()*list.length)); } 随机获取([2,3,5])

如果您使用的是node.js,您可以使用。它只是从数组中随机选取一些内容。

答案不会涉及jQuery。我从未见过对一个问题有如此多完全相同的回答……伟大的头脑,@BlindyI找到了一种涉及jQuery的方法!!(参见我的第二个答案)这个问题与完全相同,但强大的Mods在3年多的时间里都没有费心关闭它。相反,它们关闭了。数组有一个内置的长度属性-为什么要将它作为参数传递?!我想我的观点是,你可以传递任何长度,而不仅仅是数组的长度-如果你只想随机分配前两个条目,你可以在不更改方法的情况下,可以将长度设置为2。我认为将length属性作为参数传递不会出现性能问题,但我可能是错误的。像这样扩展主机对象通常不是一个好主意。您可能会被客户端将来的
Array.random
实现绊倒,而该客户端的行为与您不同rs,破坏未来的代码。在添加它之前,您至少可以检查它是否存在。仅为一个函数使用下划线或lodash可能会有些过分,但如果您正在执行任何复杂的js功能,那么它可以节省数小时甚至数天。现在,下划线也有更好的选择用于此
。.sample([1,2,3,4,5,6])
您可能会在任何实际项目上使用uu。这不是一件坏事。lodash在npm上是模块化的,因此如果您愿意,您可以只安装
示例
功能:我的信条是在任何项目中使用尽可能少的库。尽管如此,我最终总是使用lodash。不使用
项非常方便[1]
是第二项,第一项是
项[0]
。哦,对不起。因为项[0]没有给你一个统一的洗牌:下一步:
let item=items.sort(()=>0.5-Math.random())[0];
Math.random()永远不会是1,也不应该是。最大的索引应该总是比长度小一个,否则你会得到一个
未定义的
错误。优雅的解决方案。我测试了它:
var items=[“a”、“e”、“I”、“o”、“u”]
for(var I=0;I<1000000;I++){
var randomElement=items[Math.floor(Math.random()*items.length)]
if(objResults[randomElement]){
objResults[randomElement]++
}否则{
}
console.log(objResults)
经过1000000次迭代后,结果是非常随机的:
对象{u:200222,o:199543,a:199936,e:200183,i:200116}
@AnkitPatial:这是一种“置乱”的方法数组,但问题是如何从数组中获取一个随机选择的元素。这有很大的区别。@virus
Math.round
不是
Math.floor
的有效替代品。使用
round
会导致意外引用未定义的索引,例如
Math.random()
为0.95,而
items.length
为5。
Math.round(0.95*5)
为5,这将是一个无效的索引。
floor(random)
在您的示例中始终为零。答案不错。您可以更短:
items[items.length*Math.random()|0]
:)@neoascetic这句话的要点是,从数组中选择一个元素不是jQuery的问题,它是公平掷骰子的通用JS.+1!@damd re:你建议的编辑-显然是不正确的,因为在iLife中定义插件和使用插件之间存在明显的分歧。但是为了一致性,我已经替换了
$
在使用
jQuery
的行中。肯定。每行的链式方法平均不到3个,而且
$
没有每行至少使用一次,因此它没有足够的jQuery。这不是需要jQuery的问题。这是什么疯狂的
~
?以前在JS中从未见过这种情况@hatboysam:-它本质上是将操作数转换为最接近的整数。实际上,它向下舍入,就像
Math.floor
。回答不错。你仍然可以更短:
items[items.length*Math.random()|0]
:)“实际上,它向下舍入,就像Math.floor”@programmer5000。它实际上向0舍入,即~(-1.5)计算结果为-1,而不是Math.floor给出的-2。仅供参考,这可以是一行:
Math.floor(Math.random()*(max-min+1))+min
@EvanCarroll最好引用一个有用的链接,而不是向下投票f
(function($) {
    $.rand = function(arg) {
        if ($.isArray(arg)) {
            return arg[$.rand(arg.length)];
        } else if (typeof arg === "number") {
            return Math.floor(Math.random() * arg);
        } else {
            return 4;  // chosen by fair dice roll
        }
    };
})(jQuery);

var items = [523, 3452, 334, 31, ..., 5346];
var item = jQuery.rand(items);
 Array.prototype.random = function (length) {
       return this[Math.floor((Math.random()*length))];
 }

 var teams = ['patriots', 'colts', 'jets', 'texans', 'ravens', 'broncos']
 var chosen_team = teams.random(teams.length)
 alert(chosen_team)
var randomArray = [
   '#cc0000','#00cc00', '#0000cc'
];

// use _.sample
var randomElement = _.sample(randomArray);

// manually use _.random
var randomElement = randomArray[_.random(randomArray.length-1)];
// use underscore's shuffle function
var firstRandomElement = _.shuffle(randomArray)[0];
// 1. Random shuffle items
items.sort(function() {return 0.5 - Math.random()})

// 2. Get first item
var item = items[0]
var item = items.sort(function() {return 0.5 - Math.random()})[0];
const ArrayRandomModule = {
  // get random item from array
  random: function (array) {
    return array[Math.random() * array.length | 0];
  },

  // [mutate]: extract from given array a random item
  pick: function (array, i) {
    return array.splice(i >= 0 ? i : Math.random() * array.length | 0, 1)[0];
  },

  // [mutate]: shuffle the given array
  shuffle: function (array) {
    for (var i = array.length; i > 0; --i)
      array.push(array.splice(Math.random() * i | 0, 1)[0]);
    return array;
  }
}
function rand(items) {
    // "~~" for a closest "int"
    return items[~~(items.length * Math.random())];
}
function rand(items) {
    // "|" for a kinda "int div"
    return items[items.length * Math.random() | 0];
}