使用随机起始索引在数组中选择4个值

时间:2014-03-25 11:52:15

标签: javascript arrays sorting random

我的数组喜欢:

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;
}

例如:

如果start0,则返回0,1,2,3

如果start1,则返回1,2,3,4

如果start2,则返回2,3,4,5

如果start3,则返回3,4,5,0

如果start4,则返回4,5,0,1

如果start5,则返回5,0,1,2

只需随机启动索引,然后循环该数组

我想知道任何简单的方法吗?

游乐场: http://jsfiddle.net/2tSdb/

1 个答案:

答案 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),但我们会在此之后应用模运算,以便将结果数保持在0data.length-1之间。 Modulo只会在整数除法后产生余数,因此6 % 4将是26 % 6将是0,等等。这样做是因为索引永远不会高于最后一个索引。当i点击6时,模数会将其推回0,就像我们想要的那样。