টাইপস্ক্রিপ্ট ব্যবহারকারীদের জন্য অন্যের উত্তরগুলি (বিশেষত সিজারি ) একটি সাধারণ টাইপ-নিরাপদ এবং পুনরায় ব্যবহারযোগ্য বেস শ্রেণিতে সাধারণীকরণ করা যেতে পারে:
/**
* Map that stringifies the key objects in order to leverage
* the javascript native Map and preserve key uniqueness.
*/
abstract class StringifyingMap<K, V> {
private map = new Map<string, V>();
private keyMap = new Map<string, K>();
has(key: K): boolean {
let keyString = this.stringifyKey(key);
return this.map.has(keyString);
}
get(key: K): V {
let keyString = this.stringifyKey(key);
return this.map.get(keyString);
}
set(key: K, value: V): StringifyingMap<K, V> {
let keyString = this.stringifyKey(key);
this.map.set(keyString, value);
this.keyMap.set(keyString, key);
return this;
}
/**
* Puts new key/value if key is absent.
* @param key key
* @param defaultValue default value factory
*/
putIfAbsent(key: K, defaultValue: () => V): boolean {
if (!this.has(key)) {
let value = defaultValue();
this.set(key, value);
return true;
}
return false;
}
keys(): IterableIterator<K> {
return this.keyMap.values();
}
keyList(): K[] {
return [...this.keys()];
}
delete(key: K): boolean {
let keyString = this.stringifyKey(key);
let flag = this.map.delete(keyString);
this.keyMap.delete(keyString);
return flag;
}
clear(): void {
this.map.clear();
this.keyMap.clear();
}
size(): number {
return this.map.size;
}
/**
* Turns the `key` object to a primitive `string` for the underlying `Map`
* @param key key to be stringified
*/
protected abstract stringifyKey(key: K): string;
}
উদাহরণ প্রয়োগের পরে এই সহজ: কেবল stringifyKey
পদ্ধতিটি ওভাররাইড করুন । আমার ক্ষেত্রে আমি কিছু uri
সম্পত্তি শক্তিশালী করি ।
class MyMap extends StringifyingMap<MyKey, MyValue> {
protected stringifyKey(key: MyKey): string {
return key.uri.toString();
}
}
উদাহরণস্বরূপ ব্যবহারগুলি তখন যেমন এটি একটি নিয়মিত Map<K, V>
।
const key1 = new MyKey(1);
const value1 = new MyValue(1);
const value2 = new MyValue(2);
const myMap = new MyMap();
myMap.set(key1, value1);
myMap.set(key1, value2); // native Map would put another key/value pair
myMap.size(); // returns 1, not 2
===
। ES6 সেট অবজেক্টের কোনও তুলনামূলক পদ্ধতি নেই।.has()
পদ্ধতি এবং.add()
পদ্ধতিটি কেবল বন্ধ এটি একই প্রকৃত বস্তু বা একটি আদিম জন্য একই মান হচ্ছে হবে।