1. 非Set方法实现:

  1. let array = [1,5,2,3,4,2,3,1,3,4];
  2. function unique(array){
  3. let array2 = [];
  4. array.forEach((item)=>{
  5. if(array2.indexOf(item) === -1){
  6. array2.push(item);
  7. }
  8. })
  9. return array2;
  10. }
  11. console.log(unique(array));//[1, 5, 2, 3, 4]

2. Set 方法实现

  1. let array = [1,5,2,3,4,2,3,1,3,4];
  2. function unique(array){
  3. return [...new Set(array)];
  4. }
  5. console.log(unique(array));//[1, 5, 2, 3, 4]

3. Map 方法实现

map 的实现方式是 hash 哈希,哈希除了用 map,有的也会用对象代替,但是用对象会存在问题,因为对象的key值只能是字符串,因此比较数字1和字符串1的时候会有问题。因此最好的方式是用 Map,因为 Map 的key 支持任意值,但是会存在兼容性问题。

Map方法不仅可以去重,还可以找到第一个重复的值或者重复的值有哪些

  1. let array = [1,5,2,3,4,2,3,1,3,4];
  2. function unique(array){
  3. let hashMap = new Map();
  4. let array2 = [];
  5. array.forEach((item)=>{
  6. if(hashMap.has(item)){
  7. hashMap.set(item,true);
  8. }
  9. else{
  10. hashMap.set(item,false);
  11. array2.push(item);
  12. }
  13. })
  14. return array2;
  15. }
  16. console.log(unique(array));//[1, 5, 2, 3, 4]