javascript - 在具有随机起始索引的数组中选择 4 个值

标签 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

只是随机一个开始索引,所以循环那个数组

我想知道有什么简单的方法可以做到这一点吗?

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

关于javascript - 在具有随机起始索引的数组中选择 4 个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22633774/

相关文章:

javascript - Socket.io.js 未加载

javascript - 主干验证插件不验证

java - 由于 XOR 按位 ^ 运算符,Java 中的 JavaScript 表达式的返回值类型不正确

java - 与其他类的数组 - 对象 - Java

正确地将文件内容按行存储到数组中,稍后打印数组内容

使用 order by 在 Pig 中排序

javascript - React-Router:将我的 url 从 hashHistory 重定向到 browserHistory

java - 二维数组中的循环

arrays - 什么更贵 : compare or accessing an index of array

java - 如何对多个 ArrayList 中的值进行排序?