最近待业在家,系统地学习了一套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. NeatUpload .NetFromWork4.0 config配置

    NeatUpload使用---config配置(可进行大文件传输) configuration> 下增加: <configSections> <sectionGroup nam ...

  2. Java生鲜电商平台-物流动态费率、免运费和固定运费设计与架构

    Java生鲜电商平台-物流动态费率.免运费和固定运费设计与架构 说明:物流配送环节常见的有包邮,免运费,或者偏远地区动态费率,还存在一些特殊的情况,固定费率,那么如何进行物流的架构与设计呢? 运费之困 ...

  3. youtube视频在线下载

    youtube视频在线下载网站: https://www.clipconverter.cc/ youtube视频样例: https://www.youtube.com/watch?v=NMkgz0AR ...

  4. Scrum 冲刺第三篇

    是我们是这次稳了队,队员分别是温治乾.莫少政.黄思扬.余泽端.江海灵 一.会议 1.1  27号站立式会议照片: 1.2  昨天已完成的事情 团队成员 今天计划完成的任务 黄思扬 活动平台首页(前端) ...

  5. 对于不返回任何键列信息的 SelectCommand,不支持 DeleteCommand 的动态 SQL 生成

    VS新增操作数据库出现如下报错. 原因是数据库表未添加主键 MySQL: CREATE TABLE Customer (SID integer, Last_Name ), First_Name ), ...

  6. 7、Topic

    Topics In the previous tutorial we improved our logging system. Instead of using a fanout exchange o ...

  7. linux设备驱动程序-设备树(2)-device_node转换成platform_device

    设备树处理之--device_node转换成platform_device 以下讨论基于linux4.14,arm平台 platform device 设备树的产生就是为了替代driver中过多的pl ...

  8. Ubuntu 18.04上安装 phpMyAdmin

    我们将安装 phpMyAdmin 在 Ubuntu18.04 上配合 Apache 一起工作. 在安装 phpMyAdmin 之前需要已经安装了LAMP栈并提供了web页面. 如果没有安装可以参照 U ...

  9. Ubuntu14 安装过程

    系统:Description:    Ubuntu 14.04.6 LTS平台:Oracle VM VirtualBox 先到阿里巴巴开源镜像站 https://opsx.alibaba.com/ 下 ...

  10. 19、FTP服务器

    FTP (File Transfer Protocol) 文件传输协议的简称.主要用跨网络.跨平台的文件 传输.   FTP 支持两种工作工作模式:主动模式.被动模式.     主动模式: 客户端使用 ...