天天看點

JavaScript幾種數組去掉重複值的方法

數組去重複是一個常見的需求,我們暫時考慮同類型的數組去重複。主要是理清思路和考慮下性能。以下方法,網上基本都有,這裡隻是簡單地總結一下。

思路:

  1. 周遊數組,一一比較,比較到相同的就删除後面的
  2. 周遊數組,一一比較,比較到相同的,跳過前面重複的,不相同的放入新數組
  3. 任取一個數組元素放入新數組,周遊剩下的數組元素任取一個,與新數組的元素一一比較,如果有不同的,放入新數組。
  4. 周遊數組,取一個元素,作為對象的屬性,判斷屬性是否存在

1. 删除後面重複的:

view source

print?

1

function

ov1(arr){

2

//var a1=((new Date).getTime())

3

for

(

var

i=0;i<arr.length;i++)

4

for

(

var

j=i+1;j<arr.length;j++)

5

if

(arr[i]===arr[j]){arr.splice(j,1);j--;}           

6

//console.info((new Date).getTime()-a1)               

7

return

arr.sort(

function

(a,b){

return

a-b});

8

}

2. 這個是正常的方法,比較好了解,如果相同則跳出循環

view source

print?

01

function

ov2(a) {

02

//var a1=((new Date).getTime())

03

var

b = [], n = a.length, i, j;

04

for

(i = 0; i < n; i++) {

05

for

(j = i + 1; j < n; j++)

06

if

(a[i] === a[j]){j=

false

;

break

;}

07

if

(j)b.push(a[i]);

08

}

09

//console.info((new Date).getTime()-a1)   

10

return

b.sort(

function

(a,b){

return

a-b});

11

}

3. 這個我花了好長時間明白的,這裡j循環雖然繼續了,但是i值已經改變了。就等于是一個新的i循環:

view source

print?

01

function

ov3(a) {

02

//var a1=((new Date).getTime())

03

var

b = [], n = a.length, i, j;

04

for

(i = 0; i < n; i++) {

05

for

(j = i + 1; j < n; j++)

06

if

(a[i] === a[j])j=++i

07

b.push(a[i]);}

08

//console.info((new Date).getTime()-a1)   

09

return

b.sort(

function

(a,b){

return

a-b});

10

}    

4. 保證新數組中的都是唯一的

view source

print?

01

function

ov4(ar){

02

//var a1=((new Date).getTime())

03

var

m=[],f;

04

for

(

var

i=0;i<ar.length;i++){

05

f=

true

;

06

for

(

var

j=0;j<m.length;j++)

07

if

(ar[i]===m[j]){f=

false

;

break

;};

08

if

(f)m.push(ar[i])}

09

//console.info((new Date).getTime()-a1)   

10

return

m.sort(

function

(a,b){

return

a-b});

11

}

5. 用對象屬性

view source

print?

1

function

ov5(ar){

2

//    var a1=(new Date).getTime()

3

var

m,n=[],o= {};

4

for

(

var

i=0;(m= ar[i])!==undefined;i++)

5

if

(!o[m]){n.push(m);o[m]=

true

;}

6

//    console.info((new Date).getTime()-a1)   

7

return

n.sort(

function

(a,b){

return

a-b});;

8

}