数组去重(面向对象 && 链式写法)
// 虽然内置类的原型上有很多的方法,但是不一定完全够项目开发所用,所以真实项目中,需要我们自己向内置类原型扩展方法,来实现更多的功能操作
// 数组原型上有sort实现数组排序的方法,但是没有实现数组去重的方法,我们接下来向内置类原型扩展方法:myUnique,以后arr.myUnique执行可以把数组去重
Array.prototype.myUnique = function myUnique() {
// this:当前要操作的数组实例
let obj = {};
for(let i = 0; i < this.length; i++) {
let item = this[i];
if(typeof obj[item] !== "undefined"){
// 当前项已经存在
this[i] = this.length-1;
this.length--;
i--;
continue;
}
obj[item] = item;
}
obj = null;
// 为了实现链式写法
return this;
};
let arr = [10,22,11,10,13,51,15,23,14,17,57,95,27];
// 链式写法:执行完上一个方法,紧接着调用下一个方法执行
// arr之所以能调用myUnique或者sort等数组原型上的方法,是因为arr是Array的实例,所以链式写法的实现思路很简单,只需要让上一个方法执行的返回结果依然是当前类的实例,这样可以接着调用类原型上的其他方法了
arr.myUnique().sort((a , b) => a - b);
console.log(arr);
/* let arr = [10,22,11,10,13,51,15,23,14,17,57,95,27];
arr.myUnique();
arr.sort((a,b) => a - b);
console.log(arr); */
function unique(arr) {
let obj = {};
for(let i = 0; i < arr.length; i++) {
let item = arr[i];
if(typeof obj[item] !== "undefined"){
// 当前项已经存在
arr[i] = arr.length-1;
arr.length--;
i--;
continue;
}
obj[item] = item;
}
return arr;
}
let arr = [10,22,11,10,13,51,15,23,14,17,57,95,27];
arr = unique(arr);
console.log(arr);
网友评论