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
};
...