网摘:http://www.jb51.net/article/118657.htm
(一)两层for循环
Array.prototype.distinct = function (){
let arr = this;
let len = arr.length;
for(let i = 0; i < len; i++){
for(let j = i + 1; j < len; j++){
if(arr[i] == arr[j]){
arr.splice(j,1);
len--;
j--;
}
}
}
return arr;
};
var a = [1,2,3,2,1];
var b = a.distinct();
console.log(b);
(二)利用对象内属性不能相同的特点进行去重
Array.prototype.uniq2 = function(){
let arr = [];
let obj = {};
for(let i = 0; i < this.length;i++){
if(!obj[this[i]]){
obj[this[i]] = 1;
arr.push(this[i]);
}
}
return arr;
}
var arr = [112,112,34,'你好',112,112,34,'你好','str','str1'];
console.log(arr.uniq2());
(三)利用forEach和indexOf进行去重
Array.prototype.uniq3 = function(){
let arr = this;
let result = [];
let len = arr.length;
arr.forEach(function(v,i,arr){//map()、filter()也可以实现
if(arr.indexOf(v,i+1) === -1){//若果只穿一个索引参数v,
然后arr.indexOf(v,v+1)会报错arr.indexOf() is not a function() #待解决#
result.push(v);
}
});
return result;
}
var arr = [112,112,34,'你好',112,112,34,'你好','str','str1'];
console.log(arr.uniq3());
(四)利用ES6的Set()
set数据结构,它类似于数组,其成员都是唯一的,利用Array.from将set结构转换成数组
function uniq4(array){
//第一种方法
// return Array.from(new Set(array));//控制台没有输出
// console.log(Array.from(new Set(array)));
//第二种方法:拓展运算符(...)内部使用for...of循环
let resultArr = [...new Set(array)];
console.log(resultArr);
}
uniq4([1,2,3,3]);
感谢阅读我的文章,如有疑问或写错的地方,请不吝留言赐教