JSFiddle - React, Tailwind, and code Playground

by Daedalus

HTML

<script src="https://cdn.jsdelivr.net/npm/[email protected]/lodash.min.js"></script>
<pre><code id="logs"></code></pre>

JavaScript

let typeArr = [{
  type: 'two',
  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() {
      if (len < arr.length) {
        len += arr.length - len;
      } else if (len > arr.length) {
        len -= len - arr.length;
      } else {}
    },
    getIndex() {
    	return {
      	index: index,
        value: arr[index],
        fromTop: index === 0
      };
    },
    advanceIndex() {
    	let fromTop = false;
      let next = arr[index++];
      this.adjustLen();
      if (typeof next === 'undefined') {
        index = 0;
        fromTop = true;
        next = arr[index];
      }
      return {
        index: index,
        value: next,
        fromTop
      };
    }
  };
}

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

var tester = new someClass();

function next(type, size) {
  document.getElementById('logs').innerHTML += type + "\n";
  let nextObjs = [];
  let sizeObj = {
    size
  };
  let typeObj = {
    type
  };
  getNextValidType(nextObjs, typeObj, sizeObj);
  //console.log(nextObjs);
  if (nextObjs[0].fromTop) {
    document.getElementById('logs').innerHTML += '----------------------- From the top!' + "\n";
  }
  nextObjs.forEach((nextObj, i) => {
    document.getElementById('logs').innerHTML += JSON.stringify(nextObj.value) + "\n";
 ...