js 陣列合併並且去重

2022-05-03 21:12:13 字數 1705 閱讀 3957

一、陣列合併的兩種方法

1、concat--合併陣列,並且不去重

var arr1 = ["ab","bc","de","fg"];

var arr2 = ["ml","kg","ww","bc","am"];

var arr3 = arr1.concat(arr2);

console.log(arr3)

2、自定義陣列合併並去重函式

var arr1 = ["ab","bc","de","fg"];

var arr2 = ["ml","kg","ww","bc","am"];

function mergearray(arr1,arr2)

return n;

}

注意:indexof是ecma5的新方法,ie8及以下不支援,所以要做相容性處理。

if (array.prototype.indexof)

for (var i = 0,len=this.length;i

2、物件鍵值對法

該方法執行的速度比其他任何方法都快,但就是占用的記憶體大一些

實現思路:新建乙個js物件以及新陣列,遍歷要去重的陣列時,判斷值是否是js物件的鍵。不是的話,給物件新增該鍵並放入新陣列。

注意:判斷是否為物件鍵時,會自動對傳入的鍵執行『tostring()』,不同的鍵可能會被誤認為是一樣的,如:a[1]與a['1']。解決該問題還是得呼叫「indexof」.

function uniquearr(arr) ,

r = ,

len = arr.length,

val, type;

for (var i = 0; i < len; i++) else if (n[val].indexof(type) < 0)

};return r;

}console.log(uniquearr([1,2,[1,2,3],,'1',2,'4','6']))

3、陣列下標判斷法

還是得呼叫「indexof」效能跟方法1差不多,

實現思路:如果當前陣列的第i項在當前陣列中第一次出現的位置不是i,那麼表示第i項是重複的,忽略掉。否則存入結果陣列。

缺點:如果陣列中的值為undefined,則會剔除,不在新陣列中。

function uniquearr(array) 

return n;

}console.log(uniquearr([1, 2, [1, 2, 3], , '1', 2, '4', '6']))

4、排序後相鄰除法

雖然原生陣列的」sort」方法排序結果不怎麼靠譜,但在不注重順序的去重里,該缺點毫無影響。

實現思路:給傳入陣列排序,排序後相同值相鄰,然後遍歷時新陣列只加入不與前一值重複的值。

function uniquearr(array) 

}return n;

}console.log(uniquearr([1, 2, [1, 2, 3], , '1', 2, '4', '6']))

5、優化遍歷陣列法

// 思路:獲取沒重複的最右一值放入新陣列

function uniquearr(array)

return r;

}console.log(uniquearr([1, 2, [1, 2, 3], , '1', 2, '4', '6']))

js多層物件陣列 合併 JS物件陣列合併去重?

陣列去重,一般會在面試的時候才會碰到,要求手寫陣列去重方法的 如果是被提問到,陣列去重的方法有哪些?你能答出其中的10種,面試官很有可能對你刮目相看。在實際專案中碰到的陣列去重,一般都是後台去處理,很少讓前端處理陣列去重。雖然運用到的概率較低,但還是需要了解一下,以防面試的時候被問到。陣列去重的方法...

js多層物件陣列 合併 JS物件陣列合併去重?

陣列去重,一般會在面試的時候才會碰到,要求手寫陣列去重方法的 如果是被提問到,陣列去重的方法有哪些?你能答出其中的10種,面試官很有可能對你刮目相看。在實際專案中碰到的陣列去重,一般都是後台去處理,很少讓前端處理陣列去重。雖然運用到的概率較低,但還是需要了解一下,以防面試的時候被問到。陣列去重的方法...

JS 陣列,陣列物件的合併去重方法

這次對陣列的操作,我們使用es6的新語法來完成,所以在看下邊 之前,我們要了解我們下邊要用到的es6中的set集合,和for.of 方法 es6提供了新的資料結構set,它類似於陣列,但是成員的值都是唯一的,沒有重複的值。set函式可以接受乙個陣列 或類似陣列的物件 作為引數,用來初始化。注意 向s...