最近待业在家,系统地学习了一套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. Docker中如何调试剖析.net core 的程序。

    前言 现在.net core跨平台了,相信大部分人都把core的程序部署在了linux环境中,或者部署在了docker容器中,与之对应的,之前都是部署在windows环境中,在win中,我们可以用wi ...

  2. 安装Redis(Windows版)

    1,GitHub下载地址:https://github.com/MicrosoftArchive/redis/tags 2,进行安装(一直下一步即可) 注:我这里安装的地址是 D:Redis 3,在电 ...

  3. python 对过时类或方法添加删除线的方法

    class Cat(Animal): def __init__(self): import warnings warnings.warn("Cat类带删除线了", Deprecat ...

  4. react-custom-scrollbars的使用

    react-custom-scrollbars的作用 流畅的本机浏览器滚动 移动设备的本机滚动条 完全可定制 自动隐藏 自动高度 通用(在客户端和服务器上运行) requestAnimationFra ...

  5. SAP MM MIGO过账报错 - 用本币计算的余额 - 之对策

    SAP MM MIGO过账报错 - 用本币计算的余额 - 之对策 使用MIGO事务代码对采购订单4500000191,执行收货,系统报错: 详细错误信息如下: 用本币计算的余额 消息号 F5703 诊 ...

  6. 深入理解--VUE组件中数据的存放以及为什么组件中的data必需是函数

    1.组件中数据的存放 ***(重点)组件是一个单独模块的封装:这个模块有自己的HTML模板,也有data属性. 只是这个data属性必需是一个函数,而这个函数返回一个对象,这个对象里面存放着组件的数据 ...

  7. 图解Java数据结构之单链表

    本篇文章介绍数据结构中的单链表. 链表(Linked List)介绍 链表可分为三类: 单链表 双向链表 循环列表 下面具体分析三个链表的应用. 单链表 链表是有序的列表,它在内存中存储方式如下: 虽 ...

  8. 结对编程(-java-实现)

    一 .Github项目地址:https://github.com/mushan520/Four-fundamental-rules-java.git                           ...

  9. mysql update运行超时解决方案

    问题描述: 今天update(修改)mysql数据库中一张表时,发现时间很长,而且会失败.报错:Error Code: 1205. Lock wait timeout exceeded; try re ...

  10. sqlmap 注入的方法及技巧

    sqlmap 注入的方法及技巧 当给 sqlmap 这么一个 url 的时候,它会: 1.判断可注入的参数 2.判断可以用那种 SQL 注入技术来注入 3.识别出哪种数据库 4.根据用户选择,读取哪些 ...