2014-09-19 33 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