最近待业在家,系统地学习了一套js的课程。虽然工作时间真的比较长了,但有些东西只局限在知其然而不知其所以然的程度上,有些知识点通过“血和泪”的经验积累下来,也只是记了结果并没有深究,所以每次听完课都有些收获。

现在进入正题,相信很多面试者会被问到这样一道题(我就碰到过至少2次),js实现数组(只有正整数)去重有几种方法?最直接的想到的应该是双层循环进行比对,不等于push,等于不做处理,最后返回得到新数组就是去重后的数组,以下是代码:

var x = [1,2,3,4,1,4,3,5,2];
var y = [];
for(var i = 0;i < x.length; i++){
for(var j = 0;j < y.length;j++){
if(y[j] === x[i]){
break;
}
}
if(j == y.length){
y.push(x[i]);
}
}
console.log(y.join(''));

第二种方法,一般人也可以想到,就是先将数组排序,然后判断相邻的两个元素是否相等,等于忽略,不等于push,代码是:

var x = [1,2,3,4,1,4,3,5,2];
var y = [];
var newx = x.sort();
y.push(newx[0]);
for(var i=1;i<newx.length;i++){
if(newx[i] != newx[i-1]){
y.push(newx[i])
}
}
console.log(y.join('')); 

第三种方法可能一般就不会想到,也很简单,就是使用对象的属性,将数组中的元素当做对象的key,key重复会被覆盖,然后再用for in把key遍历出来,实现代码是:

var x = [1,2,3,4,1,4,3,5,2];
var y = [];
var arrMap = [];
for(var i = 0;i < x.length;i++){
arrMap[x[i]] = true;
}
for(var j in arrMap){
y.push(+j);
}
console.log(y.join(''));

值得注意的是这种方法会把数组元素转换为字符串,所以y.push(+j);“+”是将字符串又转换为整数。

如果问题升级,不只是整数,里面可能会包含布尔值,字符串,甚至undefined、null等,怎么办呢?第一种方法是完全适合的(判断一定要有严格等于===),而后两种就需要在之前做一些处理,遍历数组,根据元素类型将元素分成几部分,再将每部分做以上处理,最后再合并。

2019年第一篇over!

js对数组去重的方法总结-(2019-1)的更多相关文章

  1. js中数组去重的方法

    在实际工作或面试中,我们经常会遇到"数组去重"问题,接下来就是使用js实现的数组去重的多种方法: 1.借助ES6提供的Set结构 var arr = [1,1,2,2,3,3,4, ...

  2. JS实现数组去重的方法(6种)

    方法一: 双层循环,外层循环元素,内层循环时比较值 如果有相同的值则跳过,不相同则push进数组 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 Arra ...

  3. JS实现数组去重的方法

    1.使用ES6的Set进行去重 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"&g ...

  4. js中数组去重的几种方法

    js中数组去重的几种方法         1.遍历数组,一一比较,比较到相同的就删除后面的                 function unique(arr){                 ...

  5. JS实现数组去重方法大总结

    js数组根据对象中的元素去重: var arr2 = [ { name: "name1", num: "1" }, { name: "name2&qu ...

  6. Js对于数组去重提高效率一些心得

    最近在找工作,好几次面试都问过数组去重的问题.虽然问的都不一样,但是核心思想是没有变的. 第一种是比较常规的方法 思路: 构建一个新的数组存放结果 for循环中每次从原数组中取出一个元素,用这个元素循 ...

  7. JS实现数组去重方法整理

    前言 我们先来看下面的例子,当然来源与网络,地址<删除数组中多个不连续的数组元素的正确姿势> 我们现在将数组中所有的‘ a’ 元素删除: var arr = ['a', 'a', 'b', ...

  8. js数组去重的方法(转)

    JS数组去重的几种常见方法 一.简单的去重方法 // 最简单数组去重法 /* * 新建一新数组,遍历传入数组,值不在新数组就push进该新数组中 * IE8以下不支持数组的indexOf方法 * */ ...

  9. js中数组去重方法及性能对比

    js中数组的 数组去重 常用的数组去重方法以及效率分析: 首先我们先构建一个数组,主要是用于进行去重实验,我们主要实验的量级为1000,10000,100000,500000.具体的生成数组的方法如下 ...

随机推荐

  1. jQuery HTML/CSS 方法大全

    下表列出了用于操作HTML和CSS的所有方法. 方法 描述 addClass() 向所选元素添加一个或多个类名 after() 在所选元素之后插入内容 append() 在所选元素的末尾插入内容 ap ...

  2. Laravel向表里插入字段

    执行: php artisan make:migration add_字段_to_表名_table --table=表名 此时在database/migrations文件夹下会生成一个相应文件,更改如 ...

  3. 渗透常见linux命令

    在拿到一个 webshell 之后,大家首先会想到去把自己的权限提升到最高,windows 我们会提升到 SYSTEM 权限,而 Linux 我们会提升到 root 权限,拿在进行 Linux 提权的 ...

  4. Spring Boot实战之定制自己的starter

    本文首发于个人网站,原文地址:http://www.javaadu.online/?p=535,如需转载,请注明出处 在学习Spring Boot的过程中,接触最多的就是starter.可以认为sta ...

  5. windows elasticsearch搭集群启动失败failed to send join request to master....

    创建几份elasticsearch副本,修改各自config\elasticsearch.yml配置文件: 第一份: #允许elasticsearch跨域访问,使用elasticsearch-head ...

  6. JMETER 审批任务实战

    业务场景 我们需要对流程任务进行审批,这个和流程发起是不一样的,因为在流程发起时,只需要用户登录后,指定固定的流程方案和数据就可以发起流程了. 流程任务是需要获取任务ID再做任务审批的. 实现思路 1 ...

  7. Linux内核调试的方式以及工具集锦【转】

    转自:https://blog.csdn.net/gatieme/article/details/68948080 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原 ...

  8. Linux 多线程应用中如何编写安全的信号处理函数【转】

    转自:https://www.cnblogs.com/virusolf/p/4945642.html http://blog.163.com/he_junwei/blog/static/1979376 ...

  9. Eric6 黑色风格配置

    界面风格-黑色主题 1.设置-首选项-界面-风格选择Fusion,再配置题样式表选择路径下的eric6\Styles选择[Chinese_Dark.qss]进行修改. ​ 编辑器风格 2.选择完毕后, ...

  10. 网络编程ssh,粘包

    1.什么是socket? TCP,可靠地,面向连接协议,有阻塞rect udp,不可靠的,无线连接的服务 这里因为不需要阻塞,所以速度会很快,但安全性不高 2.关于客户端退出而服务器未退出的解决办法 ...