提及來數組去重,可能基本上每一個人都能寫出來3中左右的方法,可是每個簡單的方法,或者說每一種簡單的方式,均可能是一個知識點,多看,多寫,多用。數組
第一種:循環套循環去重
const sy1=Symbol();
const sy2=Symbol();
const arr1=[1,2,"a",3,'2',2,1,3,'a',undefined,null,NaN,null,undefined,NaN,sy1,sy2]
Array.prototype.qcArray=function(){
const _this=this;
const newArr=[];
for(let i=0;i<_this.length;i++){
for(let t=i+1;t<_this.length;t++){
if(this[i]===this[t]){
i++;
t=i;
}
}
newArr.push(this[i])
}
return newArr
}
原理是利用雙層循環,當第二層循環的時候好比i=0時,t=6的時候發現相等了,就跳過這個外層循環。
第二種:遍歷數組,若是新數組中沒有舊的數組,則添加進去
Array.prototype.qsArr1=function(){
const _this=this;
const na=[];
for(let i=0;i<_this.length;i++){
if(na.indexOf(_this[i])<0){
na.push(_this[i])
}
}
return na
}
第三種:使用ES6的新屬性new Set(); 相似數組,成員的值惟一
function qsArr2(arr) {
return [...(new Set(arr))]
}
第四種:對象的屬性惟一
Array.prototype.qsArr2=function(){
const _this=this,obj={},na=[];
for(let v of _this){
if(!obj[v]){
na.push(v);
obj[v]=1
}
}
return na
}
從效率上講,最後一種是最高的,Set()排行第二,循環遍歷是最慢的
第五種:先排序在作處理,利用Array.sort();
Array.prototype.qsArr3=function () {
const nArr=this.sort();
const na = [];
for (let i = 0; i < nArr.length; i++) {
if(nArr[i]!==nArr[i+1])
na.push(nArr[i])
}
return na
}
複製代碼
每一種方法都有本身的思想,理解了,就會在實際項目當中用到。 我獲得了一個我認爲重要的想法,解決問題是多樣的,多思考。bash