@d1g1tal/collections
Version:
JavaScript Collections ES Modules
3 lines (2 loc) • 2.12 kB
JavaScript
class s{elements=[];constructor(e=[]){this.elements=[...e]}add(e){return this.elements.push(e),this}addAll(...e){return this.elements.push(...e),this}insert(e,n){return this.elements.splice(e,0,n),this}remove(e){return this.removeAt(this.indexOf(e))}removeAt(e){if(e<0||this.elements.length<=e)throw new RangeError(`Index ${e} out of bounds.`);return this.elements.splice(e,1)[0]}get(e){return this.elements[e]}set(e,n){if(e<0||this.elements.length<=e)throw new RangeError(`Index ${e} out of bounds.`);return this.elements.splice(e,1,n),this}indexOf(e,n=0){return this.elements.indexOf(e,n)}lastIndexOf(e,n=this.elements.length-1){return this.elements.lastIndexOf(e,n)}removeLast(){return this.elements.pop()??null}removeFirst(){return this.elements.shift()??null}reverse(){return this.elements.reverse(),this}contains(e){return this.elements.includes(e)}concat(...e){const n=[...this.elements];for(const t of e)t instanceof s?n.push(...t):n.push(t);return new s(n)}join(e=","){return this.elements.join(e)}clear(){this.elements.length=0}every(e,n){return this.elements.every((t,r,i)=>e.call(n,t,r,i),n)}some(e,n){return this.elements.some((t,r)=>e.call(n,t,r,this),n)}filter(e,n){return new s(this.elements.filter((t,r)=>e.call(n,t,r,this),n))}find(e,n){return this.elements.find((t,r)=>e.call(n,t,r,this),n)}findIndex(e,n){return this.elements.findIndex((t,r)=>e.call(n,t,r,this),n)}map(e,n){return new s(this.elements.map((t,r)=>e.call(n,t,r,this),n))}reduce(e,n){return this.elements.reduce(e,n)}sort(e=(n,t)=>typeof n=="number"&&typeof t=="number"?n-t:String(n).localeCompare(String(t))){return this.elements.sort(e),this}forEach(e,n=this){this.elements.forEach((t,r)=>e(t,r,n))}isEmpty(){return this.elements.length===0}toArray(){return[...this.elements]}valueOf(){return this.elements.valueOf()}get size(){return this.elements.length}*keys(){yield*this.elements.keys()}*values(){yield*this.elements}*entries(){yield*this.elements.entries()}*[Symbol.iterator](){yield*this.elements}toString(){return this.elements.toString()}get[Symbol.toStringTag](){return"List"}}export{s as List};
//# sourceMappingURL=list.js.map