我的数组喜欢:
var arr = [0,1,2,3,4,5];
所以我随机起点(索引)如:
var start = getRandomInt(0,5);
function getRandomInt (min,max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
例如:
如果start
为0
,则返回0,1,2,3
如果start
为1
,则返回1,2,3,4
如果start
为2
,则返回2,3,4,5
如果start
为3
,则返回3,4,5,0
如果start
为4
,则返回4,5,0,1
如果start
为5
,则返回5,0,1,2
只需随机启动索引,然后循环该数组
我想知道任何简单的方法吗?
答案 0 :(得分:2)
这里的主要问题是从最后一个索引移回到0,您可以使用模运算。您应该执行类似以下操作:
var data = [0,1,2,3,4,5];
var NUM_VALUES = 4; // Amount of values to take
var start = 3; // Replace with getRandomInt function
var values = [];
for(var i = start, j = 0; j < NUM_VALUES; j++, i = (i+1) % data.length) {
values.push(data[i]);
}
console.log(values); // [ 3, 4, 5, 0 ]
变量i
包含我们要访问的Array的当前索引。它会像您想要的那样初始化为start
。变量j
仅用于确保我们获取您想要的值的数量,在这种情况下为4
。如您所见,j
在每个循环后递增1,我们继续前进,直到它等于NUM_VALUES
。没有什么花哨的。
变量i
也会增加1(i = i+1
),但我们会在此之后应用模运算,以便将结果数保持在0
和data.length-1
之间。 Modulo只会在整数除法后产生余数,因此6 % 4
将是2
,6 % 6
将是0
,等等。这样做是因为索引永远不会高于最后一个索引。当i
点击6
时,模数会将其推回0
,就像我们想要的那样。