discord-vatron
Version:
Módulo para facilitar la interacción con la API de Discord
90 lines (72 loc) • 2.77 kB
JavaScript
module.exports = class Coleccion extends Map {
constructor(iterable) {
super(iterable);
}
map(f) {
if(typeof(f) != 'function') return console.error('No has pasado una función en el método map.');
return this.array().map(f);
}
algunoCumple(f) {
if(typeof(f) != 'function') return console.error('No has pasado una función en el método algunoCumple.');
return this.array().some(f);
}
todosCumplen(f) {
if(typeof(f) != 'function') return console.error('No has pasado una función en el método todosCumplen.');
return this.array().every(f);
}
encontrar(f) {
if(typeof(f) != 'function') return console.error('No has pasado una función en el método encontrar.');
return this.array().find(f);
}
filtrar(f) {
if(typeof(f) != 'function') return console.error('No has pasado una función en el método filtrar.');
const col2 = new Coleccion();
this.claves().filter(x => f(this.get(x))).forEach(k => {
col2.set(k, this.get(k));
});
return col2;
}
ordenar(f) {
if(typeof(f) != 'function') return console.error('No has pasado una función en el método filtrar.');
const col2 = new Coleccion();
this.claves().sort((a, b) => f(this.get(a), this.get(b))).forEach(k => {
col2.set(k, this.get(k));
});
return col2;
}
primero() {
return this.array()[0] || null;
}
ultimo() {
return this.array()[this.array().length-1] || null;
}
aleatorio(num = 1) {
if(!this.array().length) return null;
if(num <= 0) num = 1;
if(this.array().length < num) return console.error('El número de elementos de la colección es mayor al específicado.');
let array = this.claves();
return num <= 1 ? this.array()[Math.floor(Math.random() * this.array().length)] : [...new Array(num)].map(() => {
const el = array[Math.floor(Math.random() * array.length)];
array = array.filter(x => JSON.stringify(x) != JSON.stringify(el));
return this.has(el) ? this.get(el) : null;
});
}
claves() {
let array = [];
const col2 = new Map(this);
let it = col2.keys();
for(var i = 0; i < this.size; i++) {
array.push(it.next().value);
}
return array;
}
array() {
let array = [];
const col2 = new Map(this);
let it = col2.values();
for(var i = 0; i < this.size; i++) {
array.push(it.next().value);
}
return array;
}
}