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

时间:2018-01-14 21:13:40

标签: javascript arrays

const Arr = [0, 1, 2];

for (var i = Number.MIN_SAFE_INTEGER; i <= Number.MAX_SAFE_INTEGER; i += 1) { ... }

需要将任何给定的 i Arr 中的相应索引相关联,以便

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

......等等。

3 个答案:

答案 0 :(得分:1)

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

您可以使用以下转换:

j = i - Math.floor(i/3)*3

注意:对于正数,您只能使用i % 3,但它不会给出您想要的负数结果。

答案 1 :(得分:1)

我可能会建议创建一个index函数,它接受一个数组xs和一个索引i。从概念上讲,我们想要做的是 wrap i,如果它在任一方向上超出xs的界限。 remainder (%) operator正是我们工作所需要的

&#13;
&#13;
const index = (xs, i) =>
  i < 0
    ? xs [0 - (i % xs.length)]
    : xs [i % xs.length]

const data =
  [ 'a', 'b', 'c' ]

for (let i = -5; i < 6; i++)
  console.log (i, index (data, i))
// -5 'c'
// -4 'b'
// -3 'a'
// -2 'c'
// -1 'b'
// 0 'a'
// 1 'b'
// 2 'c'
// 3 'a'
// 4 'b'
// 5 'c'
&#13;
&#13;
&#13;

答案 2 :(得分:0)

我找到了一个很好的解决方案:

function mod(n, m) {
  const q = n % m;
  return q < 0 ? q + m : q;
}

在此处找到:https://github.com/oliviertassinari/react-swipeable-views/blob/master/packages/react-swipeable-views-core/src/mod.js