利用ES6中的 Set 去重 Set 是 ES6 新增的一种数据结构,允许存储任何类型(原始值或引用值)的唯一值,使用这种方式非常简洁
1 2 3 4 5 6 function unique (arr ) { return Array .from(new Set (arr)); } let array = [1 , 2 , 1 , false , false , 'true' , 'true' , NaN , NaN ];console .log(unique(array));
利用ES6中的 Map 去重 Set 是 ES6 新增的一种数据结构,创建一个空Map数据结构,遍历需要去重的数组,把数组的每一个元素作为key存到Map中。由于Map中不会出现相同的key值,所以最终得到的就是去重后的结果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 function unique (arr ) { let map = new Map (); let result = []; for (let i = 0 ; i < arr.length; i++) { if (!map.has(arr[i])) { map.set(arr[i], false ); result.push(arr[i]); } else { map.set(arr[i], true ); } } return arr.filter((item, index ) => index === arr.indexOf(item)); } let array = [1 , 2 , 1 , false , false , 'true' , 'true' , NaN , NaN ];console .log(unique(array));
利用数组的 includes 方法 includes 方法用来判断一个数组是否包含一个指定的值,根据情况,如果包含则返回 true,否则返回 false
1 2 3 4 5 6 7 8 9 10 11 12 function unique (arr ) { const result = []; for (let i = 0 ; i < arr.length; i++) { if (!result.includes(arr[i])) { result.push(arr[i]); } } return result; } let array = [1 , 2 , 1 , false , false , 'true' , 'true' , NaN , NaN ];console .log(unique(array));
利用数组的 filter、indexOf 方法 1 2 3 4 5 6 function unique (arr ) { return arr.filter((item, index ) => index === arr.indexOf(item)); } let array = [1 , 2 , 1 , false , false , 'true' , 'true' , NaN , NaN ];console .log(unique(array));
利用数组的 splice 方法 注意 NaN
1 2 3 4 5 6 7 8 9 10 11 12 13 function unique (arr ) { for (let i = 0 ; i < arr.length; i++) { for (let j = 0 ; j < arr.length; j++) { if (arr[i] === arr[j] && i!== j) { arr.splice(j, 1 ); } } } return arr; } let array = [1 , 2 , 1 , false , false , 'true' , 'true' , NaN , NaN ];console .log(unique(array));
利用递归去重 注意 NaN
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 function unique (arr ) { let array = arr; let len = array.length; array.sort(function (a, b ) { return a - b; }) function loop (index ) { if (index >= 1 ) { if (array[index] === array[index - 1 ]) { array.splice(index, 1 ); } loop(index - 1 ); } } loop(len - 1 ); return array; } let array = [1 , 2 , 1 , false , false , 'true' , 'true' ];console .log(unique(array));