确定数组偏移的最快方法

时间:2014-09-19 09:26:27

标签: javascript arrays

如果我有一个任意长度的数组。如果知道每个切片的元素数量,我怎样才能找到该数组的给定元素的偏移量?我的意思是没有实际切片。

示例:

arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ..n]

if perSlice = 4; offset for arr[5] == 1, for arr[8] == 2 etc.
if perSlice = 3; offset for arr[2] = 0, for arr[4] = 1 etc.

i.e.: 

perSlice = 4
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ..n]
 0  0  0  0  1  1  1  1  2  2  2,  ..n

3 个答案:

答案 0 :(得分:3)

您可以indexOf使用modulo“perSlice”

var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ..n]
var perSlice = 4;
arr.indexOf(5) % perSlice

如果你想知道元素最终的WHICH切片,则除以%。

Math.floor(arr.indexOf(5) / perSlice) // 1

答案 1 :(得分:1)

通过执行以下操作在索引i处查找偏移量:parseInt(i/perSlice)

var arr = [0,1,2,3,4,5,6,7,8,9,10];

function getIndexes(arry, perSlice) {
  var ret =[];
  for(i in arry){
    ret.push(parseInt(i/perSlice));
  }
  return ret;
}

var indexes = getIndexes(arr, 4);
console.log(indexes);

编辑:注意这使用索引i处的值,而不是索引本身。代码很容易修改为使用索引而不是值。

答案 2 :(得分:0)

使用模数运算符

var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ..n]

       arr[(((index + step) % arr.length) + arr.length) % arr.length];