//写一个自己的类,返回去重后的对象数组和最大的id的值。(方法自己选择,推荐学习下es6的class,extends方法),这里我们就用组合继承的方式来写
//纯属个人喜欢这种组合方式(不过复制了两次父类在这里插入代码片方法,略显重复,不打紧),当然用寄生组合自然更好一点(避免复制两次),似乎没必要
let _arr = [
{ id: 1 },
{ id: 2 },
{ id: 3 },
{ id: 1 },
{ id: 2 },
{ id: 4 },
];
//需要去重的对象数组
//定义父类
function parent() {
this._obj = {};
this._arr = [];
}
//父类原型方法(去重对象数组)(不放在构造函数内是避免多次反复复制)
parent.prototype._getNewArr = function (arr, key) {
console.log(this._obj, this._arr);
this.arr = arr;
this.arr.reduce((pre, cur, index) => {
this._obj[cur[key]] ? "" : this._arr.push(cur),
(this._obj[cur[key]] = true);
}, {});
return this._arr;
};
//定义子类
function child(arr) {
parent.call(this); //理解成相当于复制了父类构造函数中的属性到这里(这里可以避免单独的原型链继承方式,父类构造函数内引用属性被所有子类实例共享的问题)
//子类自有方法(取最大id的值)
this._getMaxId = function (arr, key) {
let _arr = Array.from(new Set(this.arr.map((item) => item[key])));
return Math.max(..._arr);
};
}
child.prototype = new parent(); //这里其实重新复制了父类的属性到子类原型,包括父类原型上的方法(_getNewArr)
let getNoCfArray = new child(); //创建子类实例
console.log(getNoCfArray._getNewArr(_arr, "id")); //[{id:1},{id:2},{id:3},{id:4}]
console.log(getNoCfArray._getMaxId(_arr, "id")); //4
//以上代码可直接复制运行
js组合继承
于 2022-03-02 09:30:57 首次发布