/**
* 自定义Set,支持添加对象去重(指定对象值方法)
*/
class MySet extends Set {
constructor(params, valFnc) {
super();
this.valObject = {};
if (params) {
// 构造函数传入集合,调用add方法初始化
for (let item of params) {
this.add(item, valFnc);
}
}
}
add(val, valFnc) {
if (valFnc) {
// 该对象计算出的值存在,则返回,不添加
if (this.valObject[valFnc(val)]) {
return;
}
// 标记存在
this.valObject[valFnc(val)] = true;
}
super.add(val);
}
has(val, valFnc) {
if (valFnc) {
return this.valObject[valFnc(val)] ? true : false;
}
return super.has(val);
}
delete(val, valFnc) {
if (valFnc) {
let del = null;
for (let item of this) {
if (valFnc(val) === valFnc(item)) {
this.valObject[valFnc(val)] = false;
del = item;
break;
}
}
return super.delete(del);;
} else {
return super.delete(val);
}
}
clear() {
this.valObject = {};
super.clear();
}
}
03-12
2795

08-18
691

07-13
6607
