现在要求去重下面这个数组:

const arr = [1, 2, 3, 3, 3, '0', '1', '2', '测试', '重复', '重复', NaN, NaN, false, false];

方法一:ES6 Set()

let arr = [1, 2, 3, 3, 3, '0', '1', '2', '测试', '重复', '重复', NaN, NaN, false, false];
arr = [...new Set(arr)]; //去重后: [ 1, 2, 3, '0', '1', '2', '测试', '重复', NaN, false ]

Set 是ES6新加的集合,集合中的值不会重复。   ...操作符 会将可遍历对象,转换为数组.

方法二:利用对象

let arr = [1, 2, 3, 3, 3, '0', '1', '2', '测试', '重复', '重复', NaN, NaN, false, false];
let obj = {};
let temp = [];
for (let i = 0; i < arr.length; i++) {
let type = Object.prototype.toString.call(arr[i]); // 不加类型 分不清 1 '1' 若用typeof 只有5种类型 无法区分nu
if ( !obj[arr[i] + type] ) {
temp.push( arr[i] );
obj[ arr[i] + type ] = true; //这里给true 利于代码阅读和判断。 如果给 0,'' ,false ,undefined 都会在if那里判断为 false 不利于代码阅读
}
}
console.log(temp)  //去重后:  [ 1, 2, 3, '0', '1', '2', '测试', '重复', NaN, false ]

方法三:sort排序后 在去重

let arr = [1, 2, 3, 3, 3, '0', '1', '2', '测试', '重复', '重复', NaN, NaN, false, false];
arr = arr.sort();
let temp = [];
while (arr.length > 0) {
if ( Object.is(arr[0], arr[1]) ) { //Object.is() 用于比较2个值, 比===更靠谱 例如 Object.is(NaN,NaN) 会判断true
arr.shift();
} else {
temp.push( arr.shift() );
}
}
//此方法会清空原数组, 你可以复制个数组,在去进行操作
console.log(temp) //去重后:  [ '0', 1, '1', '2', 2, 3, NaN, false, '测试', '重复' ]

方法四:for in 

let arr = [1, 2, 3, 3, 3, '0', '1', '2', '测试', '重复', '重复', NaN, NaN, false, false];
let temp = [];
for (let i = 0; i < arr.length; i++) {
if ( !temp.includes(arr[i]) ) { //includes 检测数组是否有某个值 内部调用Object.is() 利用判断NaN
temp.push(arr[i]);
}
}
console.log(temp); //去重后: [ 1, 2, 3, '0', '1', '2', '测试', '重复', NaN, false ]

以上方法 在最新版本谷歌浏览器全部正常运行;    建议大家都用谷歌浏览器~~

但是还是要用Babel去转译这些代码 ,不然低级浏览器没法运行。

欢迎大家一起讨论, 提出新的去重方法。

由任何错误,请在评论指出。  谢谢大家。

<javaScript> 数组去重的方法总结(2017年)的更多相关文章

  1. javascript 数组去重的方法

    前言:这是笔者学习之后自己的理解与整理.如果有错误或者疑问的地方,请大家指正,我会持续更新! 方法一 //注意有一个元素是空的 var test1 = [0, 0, 1, 1, 2, 'sss', 2 ...

  2. JavaScript数组去重方法及测试结果

    最近看到一些人的去面试web前端,都说碰到过问JavaScript数组去重的问题,我也学习了一下做下总结. 实际上最有代表性也就三种方法:数组双重循环,对象哈希,排序后去重. 这三种方法我都做了性能测 ...

  3. javaScript数组去重方法

    在JAvascript平时项目开发中经常会用到数组去重的操作.这时候就要用到JS数组去重的方法了. demo1: 第一种:JS数组去重操作方法是利用遍历原数组,利用数组的indexOf()方法来来判断 ...

  4. JavaScript 数组去重方法总结

    1.遍历数组法: 这应该是最简单的去重方法(实现思路:新建一新数组,遍历数组,值不在新数组就加入该新数组中) // 遍历数组去重法 function unique(arr){ var _arr = [ ...

  5. JavaScript 数组去重 方法汇总

    <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...

  6. javascript数组去重的三种常用方法,及其性能比较

    在进行数组操作时往往会遇到去掉重复项的问题,下面简单介绍下数组去重的方法,以及其执行效率 方法一        采用两次循环        原理:拿当前的和他后面的比,如果后面的有重复的就干掉     ...

  7. [转] JavaScript数组去重(12种方法)

    数组去重,一般都是在面试的时候才会碰到,一般是要求手写数组去重方法的代码.如果是被提问到,数组去重的方法有哪些?你能答出其中的10种,面试官很有可能对你刮目相看.在真实的项目中碰到的数组去重,一般都是 ...

  8. 也谈面试必备问题之 JavaScript 数组去重

    Why underscore (觉得这部分眼熟的可以直接跳到下一段了...) 最近开始看 underscore.js 源码,并将 underscore.js 源码解读 放在了我的 2016 计划中. ...

  9. javascript数组 去重

    数组去重的方法有很多,到底哪种是最理想的,自己不清楚.于是自己测试了下数组去重的效果和性能.测试十万个数据,代码和所耗大概时间如下. 到底采用哪种方法,根据实际情况而定吧. /*方法一: 1,'1' ...

随机推荐

  1. linux—粘滞位的设置

    粘滞位(Stickybit),或粘着位,是Unix文件系统权限的一个旗标.最常见的用法在目录上设置粘滞位,如此以来,只有目录内文件的所有者或者root才可以删除或移动该文件.如果不为目录设置粘滞位,任 ...

  2. unity插件开发——MenuItem

    有unity中的菜单栏是我们经常使用到的地方,如下图: MenuItem的作用就是增加一个自己的菜单 使用方法: 在工程中Assets目录下任意一个Editor目录(以后简称Editor目录,如果不存 ...

  3. Gson解析复杂的Bean类实现Parcelable

    import java.util.ArrayList; import android.os.Parcel; import android.os.Parcelable; import android.s ...

  4. 使用$.post和action或servlet交互 URL出现 http://localhost:8080/../[object%20Object] 错误的问题解决

    使用$.post时,如下所示: $.post({ url : "./test/ajaxTest", }); 控制台报:There is no Action mapped for n ...

  5. QQ_MultiTalkServer

    package test_teacher;import java.net.*;import java.io.*;public class MultiTalkServer{    public stat ...

  6. memcached+tomcat转发forward时 sessionid一直变化的问题

    今天遇到了一个很奇怪的问题, 我在tomcat过滤器 中, 对请求过来的静态资源及html页面做了forword转发操作,核心代码如下: private void redirectMobile(Htt ...

  7. 关于sql语句between and的边界问题

    BETWEEN 操作符 操作符 BETWEEN ... AND 会选取介于两个值之间的数据范围.这些值可以是数值.文本或者日期. SQL BETWEEN 语法 SELECT column_name(s ...

  8. ios 网络/本地播放器

    推荐播放器: LRLAVPlayer相对易懂好修改,调整添加内容. https://github.com/codeWorm2015/videoPlayer NSString*path=[[NSBund ...

  9. Real-time 节点

    Real-time 节点 Real-time 节点提供一个实时索引.通过这些节点索引的数据提供查询.real-time节点将定期将他们收集的数据转移到同一跨域时间的Historical节点. 使用zo ...

  10. ORACLE中关于外键缺少索引的探讨和总结

    在ORACLE数据库中,定义外键约束时,ORACLE是不会自动创建对应索引的,必须手动在外键约束相关的列上创建索引.那么外键字段上是否有必要创建索引呢?如果有必要的话,巡检时,如何找出外键字段上没有创 ...