網(wǎng)摘:http://www.jb51.net/article/118657.htm
(一)兩層for循環(huán)
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);
(二)利用對象內(nèi)屬性不能相同的特點(diǎn)進(jìn)行去重
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進(jìn)行去重
Array.prototype.uniq3 = function(){
let arr = this;
let result = [];
let len = arr.length;
arr.forEach(function(v,i,arr){//map()、filter()也可以實(shí)現(xiàn)
if(arr.indexOf(v,i+1) === -1){//若果只穿一個索引參數(shù)v,
然后arr.indexOf(v,v+1)會報(bào)錯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數(shù)據(jù)結(jié)構(gòu),它類似于數(shù)組,其成員都是唯一的,利用Array.from將set結(jié)構(gòu)轉(zhuǎn)換成數(shù)組
function uniq4(array){
//第一種方法
// return Array.from(new Set(array));//控制臺沒有輸出
// console.log(Array.from(new Set(array)));
//第二種方法:拓展運(yùn)算符(...)內(nèi)部使用for...of循環(huán)
let resultArr = [...new Set(array)];
console.log(resultArr);
}
uniq4([1,2,3,3]);
感謝閱讀我的文章,如有疑問或?qū)戝e的地方,請不吝留言賜教