コピペコードで快適生活

明日使えるソースを自分のために

Javascriptで配列をリング状に扱えるといいな

Javascript(ES6)でループするようなスライダーとか作るときに、配列がリング状に扱えるといいなと思って書いてみました。
配列を拡張するとかではなくて、あくまで配列のIndexを取得するだけのシンプルな作りです。

export default class RingNums {
  constructor(length) {
    this.length = length;
  }

  lineList(base, left, right) {
    var list = [];
    var index = this.indexOnRing(base + left);
    var times = (left * -1) + 1 + right;

    for (var i=0; i<times; i++) {
      list.push(index);
      index = this.next(index);
    }

    return list;
  }

  next(index) {
    return this.indexOnRing(index + 1);
  }

  prev(index) {
    return this.indexOnRing(index + 1);
  }

  indexOnRing(index) {
    let length = this.length;

    if (index % length == 0) {
      index = 0;
    } else if (index < 0) {
      index = length + (index % length);
    } else if(index >= length) {
      index = index % length;
    }
    return index;
  }
}