js陣列去重之核心思想

2021-09-24 08:36:35 字數 2907 閱讀 8906

本篇的陣列去重,主要是針對前兩篇文章陣列方法的乙個實踐應用,並把每個陣列去重的核心思想分享出來,一起學習成長,下面是將會應用到的陣列方法如下:

方法一`

var arr = [3, 7, 3, 5, 7, 9, 1, 5, 9, 9]

for (var i = 0; i < arr.length; i++)

} }console.log(arr.sort()); // 輸出 [1, 3, 5, 7, 9]

複製**

` 這個去重的方法是非常經典的乙個陣列去重方式,採用比較方式,採用陣列的第一位和後一位進行比較,如果相等,則使用splice方法刪除掉當前一位;這個方法雖然在大型陣列去重的效能上面有一定缺陷,但是這個方法容易理解和應用,所以使用的人還是蠻多的。

方法二`

var arr = [3, 7, 3, 5, 7, 9, 1, 5, 9, 9]

var obj = {}, ary =

arr.map(function (item, index)

}) console.log(ary.sort())// // 輸出 [1, 3, 5, 7, 9]

複製**

`這個方法的核心思想和上面的方法是一樣的,也是進行比較,不過採取的方式不一樣而已,這個方法是事先建立了乙個空陣列和空物件,通過取物件的屬性值來和陣列的當前項比較,如果不存在則把陣列的當前項儲存到空陣列裡面去;因為這個方法是一層迴圈,所以它的效能是明顯優於上面的方法。

方法三`

var arr = [3, 7, 3, 5, 7, 9, 1, 5, 9, 9]

var ary =

for (var i = 0, len = arr.length; i < len; i++)

} console.log(ary.sort()) // 輸出 [1, 3, 5, 7, 9]

複製**

`這個方法的核心思想是通過indexof這個方法去ary這個新陣列裡查詢arr陣列裡的當前項,如果沒有則存入ary,有則不做任何處理。

方法四`

var arr = [3, 7, 3, 5, 7, 9, 1, 5, 9, 9]

var ary =

for (var item of arr)

}console.log(ary.sort()) // 輸出 [1, 3, 5, 7, 9]

複製**

`這個方法和上面的方法思想是一樣的,這裡也是建立乙個新陣列,然後在迴圈arr的過程裡,使用includes來檢測ary這個新陣列裡是否有包含這個值,有則什麼都不做,沒有則存入新陣列。

方法五`

var ary = new set(arr)	

console.log(array.from(ary).sort()) // 輸出 [1, 3, 5, 7, 9]

複製**

`這個方法**體非常的簡短,它是應用了es6的新的資料型別set(),它類似於陣列,但是成員的值都是唯一的,沒有重複的值;set的資料也具備iterable介面的,所以我直接使用array.form()把它轉換為陣列就行了。

方法六`

var ary = 

for (var i = 0, len = arr.length; i < len; i++)

}) if (!bol)

}console.log(ary.sort()) // 輸出 [1, 3, 5, 7, 9]

複製**

` 這個方法使用了陣列方法find,find方法本來就是去搜尋陣列裡是否有自符合條件的物件,有則返回該物件,沒有則返回undefined,正是因為這個特性,所以在迴圈前我也新建乙個空陣列,去執行find,有則啥也不做,沒有則存入。

方法七 `

var ary = 

for (var i = 0, len = arr.length; i < len; i++)

}) if (idx == -1)

}console.log(ary.sort()) // 輸出 [1, 3, 5, 7, 9]

複製**

`這個相信大家一眼就看明白了,這個和上面的方法一樣,只是換成了findindex,從找符合條件的返回當前物件變成返回索引,就這一點不同,思想都一樣。

方法八 `

var arry = 

var ary = arr.filter(function (item, index)

}) console.log(ary, arry) //輸出[3, 7, 5, 9, 1], [3, 7, 5, 9, 1]

複製**

`這個方法呢主要其實也是indexof來做搜尋查詢的,只是把for迴圈換成了filter而已,所以它的思想和上面使用indexof的一樣,之所這麼大費周章的演示一下,其目的也是為了展示一下陣列的方法而已,filter這個過濾器的特性。

結語

js之陣列去重

面試常考的點之一吧 我也只被考過set的用法而已 先上最簡單版 利用set new set arr es6 提供了新的資料結構set。它類似於陣列,但是成員的值都是唯一的,沒有重複的值。new set array 得到的是乙個set陣列 沒有重複值 三個點為擴充套件運算子,得到用逗號分隔的引數序列,...

JS之陣列去重

方案一,使用物件判斷陣列是否重複,發現重複則刪除當前項,並再次遍歷當前索引.function unique1 arr 建立乙個空物件 for var i 0 iobj item item 若沒有重複,則給obj新增當前項到屬性 return arr 遍歷完成,將結果返回出去 方案二,使用物件判斷陣列...

js之陣列去重

const unique arr return arr const unique arr if j newarr.length return newarr unique 1,1 1 1,2,true,false,true,3,2,2,1 1,1 2,true,false,3 核心點 2.1 inde...