如何有效地随机选择数组项而不重复?

如何有效地随机选择数组项而不重复?,第1张

如何有效地随机选择数组项而不重复?

每当选择一项时,将其移至阵列的背面,然后从原始阵列的一部分中随机选择

array.slice(0, -5)

var a = ["Roger", "Russell", "Clyde", "Egbert", "Clare", "Bobbie", "Simon", "Elizabeth", "Ted", "Caroline"];var chooseName = function () {    var unique = true;    num = Math.floor(Math.random() * a.length - 5);    name = a.splice(num,1);    a.push(name);}window.addEventListener("keypress", function (e) {    var keypre = e.keyCode;    if (keypre == 13) {        chooseName();    }}, false);

编辑:这也有一个副作用,即不给任何出现在列表尾部的变量一个不公平的缺点,即在前N个调用中不会考虑它们。如果这对您来说是个问题,请尝试在某个位置保留一个静态变量,以跟踪要使用的切片的大小,并将其最大化为B(在这种情况下为5)。例如

var a = ["Roger", "Russell", "Clyde", "Egbert", "Clare", "Bobbie", "Simon", "Elizabeth", "Ted", "Caroline"];B = 5; //max size of 'cache'N = 0;var chooseName = function () {    var unique = true;    num = Math.floor(Math.random() * a.length - N);    N = Math.min(N + 1, B);    name = a.splice(num,1);    a.push(name);}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5566415.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存