每当选择一项时,将其移至阵列的背面,然后从原始阵列的一部分中随机选择
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);}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)