我的数组看起来像:
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
只是随机一个开始索引,所以循环那个数组
我想知道有什么简单的方法可以做到这一点吗?
Playground : http://jsfiddle.net/2tSdb/
最佳答案
这里的主要问题是从最后一个索引移回 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
包含我们要访问的数组的当前索引。它被初始化为 start
就像你想要的那样。变量 j
只是为了确保我们获取您想要的值的数量,在本例中为 4
。如您所见,j
在每次循环后递增 1,我们继续执行直到它等于 NUM_VALUES
。那里没什么好看的。
变量 i
也递增 1 (i = i+1
),但我们在此之后应用模运算,以便将结果数保持在 之间>0
和 data.length-1
。模只是整数除法后的余数,所以 6 % 4
将是 2
,6 % 6
将是 0
等。这样做是为了使索引永远不会高于最后一个索引。当 i
在这里达到 6
时,模会像我们想要的那样将它推回 0
。
关于javascript - 在具有随机起始索引的数组中选择 4 个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22633774/