mc-beta-server/server/Util/funkyArray.js

80 lines
1.4 KiB
JavaScript
Raw Normal View History

2021-08-12 04:58:56 +01:00
const pRandom = require("./prettyRandom.js");
module.exports = class {
constructor(indexingMode = false) {
this.items = {};
this.itemKeys = Object.keys(this.items);
this.indexingMode = indexingMode;
this.index = 0;
this.iterableArray = [];
}
add(item, regenerate = true) {
let id;
if (this.indexingMode) {
this.items[id = this.index] = item;
} else {
this.items[id = pRandom()] = item;
}
if (regenerate) this.regenerateIterableArray();
this.itemKeys = Object.keys(this.items);
this.index++;
return this.items[id];
}
remove(id, regenerate = true) {
delete this.items[id];
if (regenerate) this.regenerateIterableArray();
this.itemKeys = Object.keys(this.items);
}
removeFirstItem(regenerate = true) {
delete this.items[this.itemKeys[0]];
if (regenerate) this.regenerateIterableArray();
this.itemKeys = Object.keys(this.items);
}
regenerateIterableArray() {
this.iterableArray = new Array();
for (let itemKey of this.itemKeys) {
this.iterableArray.push(this.items[itemKey]);
}
}
getFirstItem() {
return this.items[this.itemKeys[0]];
}
getLength() {
return this.itemKeys.length;
}
getKeyById(id) {
return this.itemKeys[id];
}
getById(id) {
return this.items[this.itemKeys[id]];
}
getByKey(key) {
return this.items[key];
}
getKeys() {
return this.itemKeys;
}
getItems() {
return this.items;
}
getIterableItems() {
return this.iterableArray;
}
}