分享经典面试题:JS数组去重的多种方法

简介: 分享经典面试题:JS数组去重的多种方法

与大家分享我在工作中用到的三种数组去重的方法,亲测有效~

1.利用es6的新特性new set

var arr1 = [1,2,3,2,4,1];
function unique(arr){
  return [...new Set(arr)]
}
console.log(  unique(arr1) );
//返回 [1,2,3,4]

注意:Set首字母需要大写,也可以用Array.from(new Set(arr))

这种方法简单好用,不过有个缺点:new Set去重是去同样类型的重,如果有数字类型1和字符串类型1是不可以的

2.数组遍历+indexof()方法

var arr2 = [1,2,3,2,4,1];
function unique( arr ){
  var brr = [];
  for( var i=0;i<arr.length;i++){
    if(  brr.indexOf(arr[i]) == -1 ){
      brr.push( arr[i] );
    }
  }
  return brr;
}
console.log( unique(arr2) );
//返回[1,2,3,4]

3.数组的sort方法+循环遍历,判断相邻的两个元素是否相等

var arr3 = [1,2,3,2,4,1];
function unique( arr ){
  arr = arr.sort();
  var brr = [];
  for(var i=0;i<arr.length;i++){
    if( arr[i] !== arr[i-1]){
      brr.push( arr[i] );
    }
  }
  return brr;
}
console.log( unique(arr3) );
//返回[1,2,3,4]

以上方法各有利弊,小伙伴们如果还有其他更合适的方法,欢迎留言探讨~

相关文章
|
12天前
|
缓存 算法 Java
Java面试题:深入探究Java内存模型与垃圾回收机制,Java中的引用类型在内存管理和垃圾回收中的作用,Java中的finalize方法及其在垃圾回收中的作用,哪种策略能够提高垃圾回收的效率
Java面试题:深入探究Java内存模型与垃圾回收机制,Java中的引用类型在内存管理和垃圾回收中的作用,Java中的finalize方法及其在垃圾回收中的作用,哪种策略能够提高垃圾回收的效率
16 1
|
8天前
|
Android开发
Android面试题之View的invalidate方法和postInvalidate方法有什么区别
本文探讨了Android自定义View中`invalidate()`和`postInvalidate()`的区别。`invalidate()`在UI线程中刷新View,而`postInvalidate()`用于非UI线程,通过消息机制切换到UI线程执行`invalidate()`。源码分析显示,`postInvalidate()`最终调用`ViewRootImpl`的`dispatchInvalidateDelayed`,通过Handler发送消息到UI线程执行刷新。
17 1
|
12天前
|
缓存 Prometheus 监控
Java面试题:如何监控和优化JVM的内存使用?详细讲解内存调优的几种方法
Java面试题:如何监控和优化JVM的内存使用?详细讲解内存调优的几种方法
31 3
|
12天前
|
缓存 监控 算法
Java面试题:讨论JVM性能调优的常见方法和技巧。
Java面试题:讨论JVM性能调优的常见方法和技巧。
16 1
|
16天前
|
JavaScript API
js【最佳实践】遍历数组的八种方法(含数组遍历 API 的对比)for,forEach,for of,map,filter,reduce,every,some
js【最佳实践】遍历数组的八种方法(含数组遍历 API 的对比)for,forEach,for of,map,filter,reduce,every,some
27 1
|
12天前
|
存储 设计模式 监控
Java面试题:简述JVM的内存结构,包括堆、栈、方法区等。栈内存优化的方法有 哪些?
Java面试题:简述JVM的内存结构,包括堆、栈、方法区等。栈内存优化的方法有 哪些?
19 0
|
17天前
|
JavaScript
JS【详解】setTimeout 延时(含清除 setTimeout,计时开始时间,0 秒延时解析,多 setTimeout 执行顺序,setTimeout 应用场景,网红面试题)
JS【详解】setTimeout 延时(含清除 setTimeout,计时开始时间,0 秒延时解析,多 setTimeout 执行顺序,setTimeout 应用场景,网红面试题)
35 0
|
18天前
|
JavaScript
JS数组操作---删除,arr.pop()方法从数组中删除最后一个元素,并返回该元素的值,arr.shift() 删除第一个值,arr.splice()方法,删除指定元素,arr.splice,从第一
JS数组操作---删除,arr.pop()方法从数组中删除最后一个元素,并返回该元素的值,arr.shift() 删除第一个值,arr.splice()方法,删除指定元素,arr.splice,从第一
|
存储 缓存 JavaScript
56 道高频 JavaScript 与 ES6+ 的面试题及答案(下)
56 道高频 JavaScript 与 ES6+ 的面试题及答案(下)
348 0
56 道高频 JavaScript 与 ES6+ 的面试题及答案(下)
|
存储 缓存 JSON
56 道高频 JavaScript 与 ES6+ 的面试题及答案(中)
56 道高频 JavaScript 与 ES6+ 的面试题及答案(中)
237 0