如何将任何整数映射到javascript数组中的索引

如何将任何整数映射到javascript数组中的索引,javascript,arrays,Javascript,Arrays,。。。等等。这个问题不需要数组因子。它是关于将任何整数映射到一个有限的范围 这可以通过以下转换实现: i=-3 => 0 i=-2 => 1 i=-1 => 2 i=0 => 0 i=1 => 1 i=2 => 2 i=3 => 0 i=4 => 1 i=5 => 2 注意:对于正数,您可以只使用i%3,但它不能提供负数所需的结果 我可能建议创建一个索引函数,该函数接受一个数组xs,以及一个索引I。从概念上讲,我们要做的是在i在任何方向超出

。。。等等。

这个问题不需要数组因子。它是关于将任何整数映射到一个有限的范围

这可以通过以下转换实现:

i=-3 => 0
i=-2 => 1
i=-1 => 2
i=0 => 0
i=1 => 1
i=2 => 2
i=3 => 0
i=4 => 1
i=5 => 2

注意:对于正数,您可以只使用
i%3
,但它不能提供负数所需的结果

我可能建议创建一个
索引
函数,该函数接受一个数组
xs
,以及一个索引
I
。从概念上讲,我们要做的是在
i
在任何方向超出
xs
的范围时将其环绕。这正是我们做这项工作所需要的

const index=(xs,i)=>
i<0
? xs[0-(i%xs.length)]
:xs[i%xs.长度]
常量数据=
[‘a’、‘b’、‘c’]
for(设i=-5;i<6;i++)
console.log(i,索引(数据,i))
//-5‘c’
//-4‘b’
//-3'a'
//-2‘c’
//-1‘b’
//0'a'
//1‘b’
//2'c'
//3'a'
//4‘b’

//5'c'
我找到了一个很好的解决方案:

j = i - Math.floor(i/3)*3
功能模块(n,m){
常数q=n%m;
返回q<0?q+m:q;
}

在这里可以找到:

更适合使用具有两个属性的对象:键和值。是否有任何答案适合您的需要?你能留下评论吗?
j = i - Math.floor(i/3)*3
function mod(n, m) {
  const q = n % m;
  return q < 0 ? q + m : q;
}