JSFiddle - React, Tailwind, and code Playground

by Daedalus

HTML

<pre><code id="logs"></code></pre>

JavaScript

let typeArr = [{
  type: 'one',
  name: 'test1',
  priority: 5
}, {
  type: 'one',
  name: 'test2',
  priority: 10
}, {
  type: 'two',
  name: 'test3',
  priority: 55
}, {
  type: 'one',
  name: 'test4',
  priority: 15
}, {
  type: 'one',
  name: 'test5',
  priority: 4
}];

typeArr.sort((a, b) => b.priority - a.priority);
console.clear();
/*document.getElementById('logs').innerHTML = JSON.stringify(typeArr.map(type => {
  return {
    name: type.name,
    type: type.type,
    priority: type.priority
  };
}), null, 2) + "\n";*/

function iterator(arr) {
  var index = 0,
    len = arr.length;

  return {
    adjustLen(current) {
      if (len < arr.length) {
        len += arr.length - len;
        return arr[index += len];
      } else if (len > arr.length) {
        len -= len - arr.length;
        return arr[index -= len];
      } else {
      	return current;
      }
    },
    next() {
      let fromTop = false;
      let next = arr[index++];
      next = this.adjustLen(next);
      if (typeof next === 'undefined') {
        index = 0;
        fromTop = true;
        next = arr[index++];
      }
      return {
        index: arr.indexOf(next),
        value: next,
        fromTop
      };
    },
    prev() {
      let fromBottom = false;
      let prev = arr[index--];
      prev = this.adjustLen(prev);
      if (typeof prev === 'undefined') {
        index = arr.length - 1;
        fromBottom = true;
        prev = arr[index--];
      }
      return {
        index: arr.indexOf(prev),
        value: prev,
        fromBottom
      };
    }
  };
}

class someClass {
  constructor() {
    this._iterator = iterator(typeArr);
  }

  next() {
    let next = this._iterator.next();
    return next;
  }

  prev() {
    let prev = this._iterator.prev();
    return prev;
  }
}

var tester = new someClass();

let prevObjs = [];

function next(type, size) {
  document.getElementById('logs').innerHTML += type + "\n";
  let nextObjs = [];
  let sizeObj = {
    size
  };
 ...