advanced-map-altered-equal
Version:
Map-like class with customizable equality operator
55 lines • 1.49 kB
JavaScript
"use strict";
const tslib_1 = require("tslib");
const advanced_map_base_1 = tslib_1.__importDefault(require("advanced-map-base"));
/**
* This class allows one to alter equality comparision
*/
class AlteredEqual extends advanced_map_base_1.default {
/**
* @param Map A constructor (a.k.a class) that creates an iterable Map-like object
* @param equal Function that compares keys, default to `Object.is`
*/
constructor(Map, equal = Object.is) {
super(Map);
this.equal = equal;
}
find(key) {
const { equal } = this;
for (const [k, v] of this.data) {
if (equal(key, k)) {
return {
found: true,
value: {
key: k,
value: v
}
};
}
}
return {
found: false
};
}
has(key) {
return this.find(key).found;
}
get(key) {
const res = this.find(key);
return res.found ? res.value.value : undefined;
}
set(key, value) {
const res = this.find(key);
this.data.set(res.found ? res.value.key : key, value);
return this;
}
delete(key) {
const res = this.find(key);
if (res.found) {
this.data.delete(res.value.key);
return true;
}
return false;
}
}
module.exports = AlteredEqual;
//# sourceMappingURL=index.js.map