一房轿、利用 ES6 Set 去重(ES6 中最常用)
function dedup (arr) {
? ? ? ? ? return Array.from(new Set(arr))
? ? ? ? }
? ? ? ? var arr=[1,4,5,666,6,6,79,3,23,1,1]
? ? ? ? console.log(dedup(arr))
不考慮兼容性辟汰,這種去重的方法代碼最少。這種方法還無法去掉?{}?空對(duì)象哆档,后面的高階方法會(huì)添加去掉重復(fù)?{}?的方法。
二、利用 for 嵌套 for,然后 splice 去重(ES5 中最常用)
function dedup(arr){
? ? ? ? ? ? for(let i=0;i<arr.length;i++){
? ? ? ? ? ? ? ? for(let j=i+1;j<arr.length;j++){
? ? ? ? ? ? ? ? ? ? if(arr[i]==arr[j]){
? ? ? ? ? ? ? ? ? ? ? ? arr.splice(j,1) ?//第一個(gè)等同于第二個(gè)煌珊,splice方法刪除第二個(gè)
? ? ? ? ? ? ? ? ? ? ? ? j--
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? return arr
? ? ? ? }
? ? ? ? ?var arr=[1,4,5,666,6,6,79,3,23,1,1]
? ? ? ? console.log(dedup(arr))
雙層循環(huán),外層循環(huán)元素,內(nèi)層循環(huán)時(shí)比較值。值相同時(shí)味滞,則刪去這個(gè)值淘这。
三、利用 indexOf 去重
function dedup(arr){
? ? ? ? ? ? var array = []
? ? ? ? ? ? for(var i=0;i<arr.length;i++){
? ? ? ? ? ? ? ? if(array.indexOf(arr[i])===-1){ ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? array.push(arr[i])
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? return array;
? ? ? ? }
? ? ? ? var arr=[1,4,5,666,6,6,79,3,23,1,1]
? ? ? ? console.log(dedup(arr))
新建一個(gè)空的結(jié)果數(shù)組否纬,for 循環(huán)原數(shù)組虱黄,判斷結(jié)果數(shù)組是否存在當(dāng)前元素蹬刷,如果有相同的值則跳過畴博,不相同則 push 進(jìn)數(shù)組笨忌。
四、利用 sort()
?function dedup(arr){
? ? ? ? arr=arr.sort()
? ? ? ? var arr1=[arr[0]]
? ? ? ? for(var i=1;i<arr.length;i++){
? ? ? ? ? ? if(arr[i]!==arr[i-1]){
? ? ? ? ? ? ? ? arr1.push(arr[i])
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? return arr1
? ? }
? ? ?var arr=[1,4,5,666,6,6,79,3,23,1,1]
? ? ?console.log(dedup(arr))
利用?sort()?排序方法俱病,然后根據(jù)排序后的結(jié)果進(jìn)行遍歷及相鄰元素比對(duì)官疲。
五、利用 filter
function dedup(arr){
? ? return arr.filter(function(item,index,arr){
? ? ? ? return arr.indexOf(item,0)===index //當(dāng)前元素庶艾,在原始數(shù)組中的第一個(gè)索引==當(dāng)前索引值,否則返回當(dāng)前元素
? ? })
}
? ? var arr=[1,4,5,666,6,6,79,3,23,1,1]
? ? ?console.log(dedup(arr))
六擎勘、[...new Set(arr)]
var arr=[1,4,5,666,6,6,79,3,23,1,1]
? ? ?console.log([...new Set(arr)] )