最近待业在家,系统地学习了一套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. 基于cephfs搭建高可用分布式存储并mount到本地

    原文:https://www.fullstackmemo.com/2018/10/11/cephfs-ha-mount-storage/ 服务器硬件配置及环境 项目 说明 CPU 1核 内存 1GB ...

  2. charles注册码及中文版本,支持window和mac

    安装证书: 安装完证书之后设置代理 2个* ,代表全部 注册码: Registered Name: https://zhile.io License Key: 48891cf209c6d32bf4 破 ...

  3. Docker制作dotnet core控制台程序镜像

    (1)首先我们到某个目录下,然后在此目录下打开visual studio code. 2.编辑docker file文件如下: 3.使用dotnet new console创建控制台程序; 4.使用d ...

  4. Linux Tools 之 iostat 工具总结

    iostat是Linux中被用来监控系统的I/O设备活动情况的工具,是input/output statistics的缩写.它可以生成三种类型的报告: CPU利用率报告 设备利用率报告 网络文件系统报 ...

  5. Windows出现“引用账户被锁定,且暂时无法登录”解决方法

    1. 问题描述如下: i. 远程桌面登录时,出现提示必须修改密码才能登录,是因为密码过期所导致的,如下图: ii. 当我们登录Windows控制台(基于OpenStack平台的虚拟机)进行修改密码时, ...

  6. kibana和中文分词器analysis-ik的安装使用

    Centos7安装elasticSearch6 上面讲述了elasticSearch6的安装和使用教程. 下面讲一下elasticsearch6的管理工具Kibana. Kibana是一个开源的分析和 ...

  7. linux驱动学习笔记---实现中断下半部以及驱动编写规范(七)【转】

    转自:https://blog.csdn.net/weixin_42471952/article/details/81609141 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协 ...

  8. 1-22Python练习题1-1

      Python¶   (一)四个数字:1.2.3.4,组成多少个互不相同且无重复数字的三位数?各是多少? In [1]: b=[] for i in range(1,5): for j in ran ...

  9. jetbrains 系列编辑器

    下载 webstorm下载地址:https://www.jetbrains.com/webstorm/download/previous.html idea下载地址:https://www.jetbr ...

  10. E03 【餐厅】Can I book a table for two for this evening,please?

    核心句型 Can I book a table for two for this evening,please? 我能预定一张今晚的双人桌吗? What time do you want to hav ...