2014-09-19 73 views
0

如果我有一个任意长度的数组。如果知道每个切片的元素数量,我怎么能找到该数组的给定元素的偏移量?我的意思是没有实际切片阵列。确定数组中偏移量的最快方法

例子:

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 

回答

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,而不是指数本身。代码很容易修改为使用索引而不是值。

+0

有趣.... – Agzam 2014-09-19 09:47:36

+0

用代码更新以生成你想要的数组(我理解它) – AlexanderBrevig 2014-09-19 09:53:18

+1

不需要生成数组。它只是为了更好地解释我需要的东西。谢谢 – Agzam 2014-09-19 09:58:48

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 

如果你想知道哪个片的元素结束,分而不是%。

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

不,不起作用 – Agzam 2014-09-19 09:39:18

+0

它适用于我。请分享你的反例。 – folkol 2014-09-19 09:44:37

+0

或者,你的意思是一个Array.prototype.slice之后的索引?在这种情况下,减去perSlice而不是%。 – folkol 2014-09-19 09:46:07

0

使用模运算符

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

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

nope ...似乎并不正确 – Agzam 2014-09-19 09:40:39