1、Set結構去重。
這是ES6 提供了新的數據結構 Set。它類似於數組,但是成員的值都是唯一的,沒有重復的值。
1 let unique= [...new Set(array)]; 2 //es6 Set數據結構類似於數組,成員值是唯一的,有重復的值會自動去重。 3 //Set內部使用===來判斷是否相等,類似'1'和1會兩個都保存,NaN和NaN只會保存一個
2、遍歷,將值添加到新數組,用indexOf()判斷值是否存在,已存在就不添加,達到去重效果。
let a = ['1','2','3',1,NaN,NaN,undefined,undefined,null,null, 'a','b','b']; let unique= arr =>{ let newA=[]; arr.forEach(key => { if( newA.indexOf(key)<0 ){ //遍歷newA是否存在key,如果存在key會大於0就跳過push的那一步 newA.push(key); } }); return newA; } console.log(unique(a)) ;//["1", "2", "3", 1, NaN, NaN, undefined, null, "a", "b"] //ps:這個方法不能分辨NaN,會出現兩個NaN。是有問題的,下面那個方法好一點。
3、遍歷,將數組的值添加到一個對象的屬性名里,並給屬性賦值,對象不能添加相同屬性名,以這個為依據可以實現數組去重,然后用Object.keys(對象)
返回這個對象可枚舉屬性組成的數組,這個數組就是去重后的數組。
let a = ['1', '2', '3', 1,NaN,NaN,undefined,undefined,null,null, 'a', 'b', 'b']; const unique = arr => { var obj = {} arr.forEach(value => { obj[value] = 0;//這步新添加一個屬性,並賦值,如果不賦值的話,屬性會添加不上去 }) return Object.keys(obj);//`Object.keys(對象)`返回這個對象可枚舉屬性組成的數組,這個數組就是去重后的數組 } console.log(unique(a));//["1", "2", "3", "NaN", "undefined", "null", "a", "b"]