Js陣列去重的五種方式

2021-10-01 17:41:51 字數 2970 閱讀 9192

talk is cheap,show you the code.

var fruits=

['蘋果'

,'香蕉'

,'葡萄'

,'火龍果'

,'蘋果'

,'葡萄'

,'火龍果'

]distinct

(fruits)

;console.

log(fruits)

;//(4) ["蘋果", "香蕉", "葡萄", "火龍果"]

//雙重迴圈

function

distinct

(arr)}}

return arr;

}

這種方式的去重簡單來說就是我從第乙個開始迴圈剩下的與之對比,去掉相同的所以這個的方式它的時間複雜度是o(n^2),如果陣列長度很大,效率會很低,另外如果陣列中有nan的話也是無法去重的。(nan==nan為false)

如果陣列裡面是物件,我們知道每個物件都會開闢乙個新的空間,所以在判斷相等時內容一樣,也不會一樣,所以在構造資料時,我們可以在裡面放乙個唯一標識,一般後端給我媽傳回來的資料應該都有乙個id。

var student=[,

,,,,

]distinct

(student)

;console.

log(student)

;// 0:

// 1:

// 2:

// length: 3

function

distinct

(arr)}}

return arr;

}

var fruits=

['蘋果'

,'香蕉'

,'葡萄'

,'火龍果'

,'蘋果'

,'葡萄'

,'火龍果'

]var fruits1two=

['蘋果'

,'牛油果'

,'桃子'

,'菠蘿'

,'桃子'

]console.

log(

distinct

(fruits,fruits1two));

//(7) ["蘋果", "香蕉", "葡萄", "火龍果", "牛油果", "桃子", "菠蘿"]

加 indexof

function

distinct3

(a, b)

)}

利用indexof檢測元素在陣列中第一次出現的位置是否和元素現在的位置相等,如果不等則說明該元素是重複元素。此方法物件不去重,nan會被忽落掉(arr.indexof(nan)=-1)。

var fruits=

['蘋果'

,'香蕉'

,'葡萄'

,'火龍果'

,'蘋果'

,'葡萄'

,'火龍果'

]console.

log(

distinct

(fruits));

// ["火龍果", "蘋果", "葡萄", "香蕉"]

function

distinct

(array)

seen = sortedarray[i];}

return res;

}

先呼叫陣列的排序方法,然後比較相鄰的兩個是否相等從而實現去重。此方法物件和nan不去重,數字1與字串1也不去重。

注:v8引擎 的 sort() 方法在陣列長度小於等於10的情況下,會使用插入排序,大於10的情況下會使用快速排序

var fruits=

['蘋果'

,'香蕉'

,'葡萄'

,'火龍果'

,'蘋果'

,'葡萄'

,'火龍果'

]console.

log(

distinct

(fruits));

// ["蘋果", "香蕉", "葡萄", "火龍果"]

function

distinct

(array)

可以簡化為:

function

distinct

(array)

甚至:

let

distinct

=(a)

=>

[...

newset

(a)]

es6提供的set 結構的乙個特性就是成員值都是唯一的,沒有重複的值,此方法物件不去重,nan去重。

function

distinct

(array)

;return array.

filter

(function

(item, index, array)

)}

這種方法是利用乙個空的 object 物件,我們把陣列的值存成 object 的 key 值,比如 object[value1] = true,在判斷另乙個值的時候,如果 object[value2]存在的話,就說明該值是重複的,但是最後請注意這裡obj[typeof item + item] = true沒有直接使用obj[item],是因為 123 和 『123』 是不同的,直接使用前面的方法會判斷為同乙個值,因為物件的鍵值只能是字串,所以我們可以使用 typeof item + item 拼成字串作為 key 值來避免這個問題。此方法物件、nan均去重。

參考:

js陣列去重五種方法

今天來聊一聊js陣列去重的一些方法,包括一些網上看到的和自己總結的,總共5種方法 es5 這種方法最簡單最直觀,也最容易理解,如下 var arr 2,8,5,0,5,2,6,7,2 var newarr for var i 0 i arr.length i console.log newarr 結...

js陣列去重五種方法

今天來聊一聊js陣列去重的一些方法,包括一些網上看到的和自己總結的,總共5種方法 es5 這種方法最簡單最直觀,也最容易理解,如下 1 var arr 2,8,5,0,5,2,6,7,2 2 var newarr 3 for var i 0 i arr.length i 7 8 console.lo...

js五種簡單的陣列去重方法

第一種方法 雙層迴圈,外層迴圈元素,內層迴圈時比較值,如果有相同的值則跳過,不相同則push進陣列 function distinct arr res.push arr i return res var arr 1,2,3,4,4,1,1,2,1,1,1 var result distinct ar...