問題:將乙個陣列元素去重。
假設我們的陣列為
var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, nan, nan,'nan', 0, 0, 'a', 'a',,];去重的方法很多,筆者這裡主要總結了7種方法。
第一種:採用set去重(es6)
let f1 = (arr)=>
array.from()
方法從乙個類似陣列或可迭代物件建立乙個新的,淺拷貝的陣列例項。
缺點:該方法無法去除元素。
第二種:採用演算法的實習思想採用雙重遍歷去重。
let f2 = (arr)=>該方法容易想到。}return
arr;
}
缺點:無法去掉nan與。
第三種:採用indexof()去重。
let f3 = (arr)=>該方法的思想是查詢arr1中是否存在arr中的元素,不存在則將該元素push到陣列中去。let arr1 =;
for(let i =0;i)
}return
arr1;
}
缺點:無法去除nan與。
第四種:排序的方式。
let f4 = (arr)=>將陣列排序後,通過前後比較,如果不相同,就將去push到arr1中去。arr =arr.sort();
let arr1 =[arr[0]];
for(let i = 1;i)
}return
arr1;
}
缺點:無法去除nan與。
第五種:採用includes的方法去重。
let f5 = (arr)=>該方法也是採用的如果arr1中不存在arr中的元素,就將該元素push到arr1中去。let arr1 =;
for(let i =0;i)
}return
arr1;
}
缺點:無法去掉。
第六種:filter去重。
let f6 = (arr)=>)缺點:不能去除,而且會將nan與"nan"當成一樣的。}
第七種:利用物件的hasownproperty方法
let f7 = (arr)=>;缺點:無。不過該方法是有乙個奇怪的地方。return arr.filter((item)=>)
}
let obj=;例如我宣告了兩個物件,乙個屬性名是數字,乙個屬性名是字串。當我列印的時候。let obj1=
會發現是一樣的,這也就是為什麼用obj[typeof item +item] = true而不用obj[item] = true。
JS陣列去重,物件去重
例項1根據indexof去重,indexof的好處就是返回的是首次出現的位置,這樣後面即使出現的值一樣,也只能返回第一次出現的索引,當然這個只適用於簡單的陣列 物件陣列去重 const objarr const obj const newobjarr for let i 0 i objarr.len...
js 陣列去重
function unique arr if isrepeated return result 建立乙個新的陣列,迴圈原有的陣列,每取乙個數就迴圈判斷新建的陣列中是否有和這個相等的值,沒有則插入。方法簡單,但是有雙重迴圈,陣列大了之後效率低。所以能一次迴圈解決最好。var str new array...
JS 陣列去重
我總共想出了三種演算法來實現這個目的 array.prototype.unique1 function return n array.prototype.unique2 function r n為hash表,r為臨時陣列 for var i 0 i this.length i 遍歷當前陣列 retu...