JavaScript常用8种数组去重代码实例


Posted in Javascript onSeptember 09, 2020

在我们学习和使用JavaScript的中,会经常使用到数组的去重,接下来的内容,来给大家分享一下,我们在开发过程中,常用到的数组去重方法,这些方法都是有在实战中真实实践过的,非常值得大家学习和收藏,我们一起来看看都有哪些方法吧!

1.利用对象的属性

使用对象属性不重名的特性。

var arr = ['qiang','ming','tao','li','liang','you','qiang','tao'];
console.time("nonredundant1");
var nonredundant1 = Object.getOwnPropertyNames(arr.reduce(function(seed, item, index) {
  seed[item] = index;
  return seed;
},{}));
console.timeEnd("nonredundant1");
console.log(nonredundant1);

结果如下:

JavaScript常用8种数组去重代码实例

2. 使用Set数据结构

set是一种类似数组的结构,但是set成员中没有重复的值。set()函数可以接受一个数组或者类数组的参数,生成一个set对象。而Array.from方法用于将两类对象转为真正的数组:类似数组的对象(array-like object和可遍历iterable)的对象包括 ES6 新增的数据结构 Set 和 Map)。

var arr = ['qiang','ming','tao','li','liang','you','qiang','tao'];
function unique (arr) {
  return Array.from(new Set(arr))
}
console.time("nonredundant2");
var nonredundant2 = unique(arr);
console.timeEnd("nonredundant2");
console.log(nonredundant2);

结果如下:

JavaScript常用8种数组去重代码实例

3. 使用for循环和splice

function unique(arr) {
  for (var i = 0; i < arr.length; i++) {
    for (var j = i + 1; j < arr.length; j++) {
      if (arr[i] == arr[j]) {     //第一个等同于第二个,splice方法删除第二个
        arr.splice(j, 1);
        j--;
      }
    }
  }
  return arr;
}
console.time("nonredundant3");
var arr = ['qiang', 'ming', 'tao', 'li', 'liang', 'you', 'qiang', 'tao'];
var nonredundant3 = unique(arr);
console.timeEnd("nonredundant3");
console.log(nonredundant3);

结果如下:

JavaScript常用8种数组去重代码实例

4.使用indexOf判断去重

function unique(arr) {
  var array = [];
  for (var i = 0; i < arr.length; i++) {
    if (array .indexOf(arr[i]) === -1) {
      array .push(arr[i])
    }
  }
  return array;
}
var arr = ['qiang', 'ming', 'tao', 'li', 'liang', 'you', 'qiang', 'tao'];
console.time("nonredundant4");
var nonredundant4 = unique(arr);
console.timeEnd("nonredundant4");
console.log(nonredundant4);

结果如下:

JavaScript常用8种数组去重代码实例

5.使用sort排序去重

function unique(arr) {
  arr = arr.sort()
  var arrry = [arr[0]];
  for (var i = 1; i < arr.length; i++) {
    if (arr[i] !== arr[i - 1]) {
      arrry.push(arr[i]);
    }
  }
  return arrry;
}

var arr = ['qiang', 'ming', 'tao', 'li', 'liang', 'you', 'qiang', 'tao'];
console.time("nonredundant5");
var nonredundant5 = unique(arr);
console.timeEnd("nonredundant5");

结果如下:

JavaScript常用8种数组去重代码实例

6.使用filter

function unique(arr) {
  var obj = {};
  return arr.filter(function(item, index, arr){
    return obj.hasOwnProperty(typeof item + item) ? false : (obj[typeof item + item] = true)
  })
}
var arr = ['qiang', 'ming', 'tao', 'li', 'liang', 'you', 'qiang', 'tao'];
console.time("nonredundant6");
var nonredundant6 = unique(arr);
console.timeEnd("nonredundant6");
console.log(nonredundant6);

结果如下:

JavaScript常用8种数组去重代码实例

7.使用Map数据结构去重

function unique(arr) {
  let map = new Map();
  let array = new Array(); // 数组用于返回结果
  for (let i = 0; i < arr.length; i++) {
    if (map.has(arr[i])) { // 如果有该key值
      map.set(arr[i], true);
    } else {
      map.set(arr[i], false);  // 如果没有该key值
      array.push(arr[i]);
    }
  }
  return array;
}

var arr = ['qiang', 'ming', 'tao', 'li', 'liang', 'you', 'qiang', 'tao'];
console.time("nonredundant7");
var nonredundant7 = unique(arr);
console.timeEnd("nonredundant7");
console.log(nonredundant7);

结果如下:

JavaScript常用8种数组去重代码实例

8.使用reduce和include去重

function unique(arr){
  return arr.reduce((prev,cur) => prev.includes(cur) ? prev : [...prev,cur],[]);
}
var arr = ['qiang', 'ming', 'tao', 'li', 'liang', 'you', 'qiang', 'tao'];
console.time("nonredundant8");
var nonredundant8 = unique(arr);
console.timeEnd("nonredundant8");
console.log(nonredundant8);

结果如下:

JavaScript常用8种数组去重代码实例

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Jquery 实现Tab效果 思路是js思路
Mar 02 Javascript
javascript 面向对象的JavaScript类
May 04 Javascript
jquery异步请求实例代码
Jun 21 Javascript
jquery 无限级联菜单案例分享
Mar 26 Javascript
微信小程序教程之本地图片上传(leancloud)实例详解
Nov 16 Javascript
使用travis-ci如何持续部署node.js应用详解
Jul 30 Javascript
vue-router重定向不刷新问题的解决
Jun 25 Javascript
微信小程序自定义toast的实现代码
Nov 16 Javascript
基于JS实现操作成功之后自动跳转页面
Sep 25 Javascript
微信小程序实现分页加载效果
Nov 19 Javascript
vue仿携程轮播图效果(滑动轮播,下方高度自适应)
Feb 11 Vue.js
原生JS实现飞机大战小游戏
Jun 09 Javascript
Vue项目配置跨域访问和代理proxy设置方式
Sep 08 #Javascript
如何使用jQuery操作Cookies方法解析
Sep 08 #jQuery
js实现右键弹出自定义菜单
Sep 08 #Javascript
vue 使用原生组件上传图片的实例
Sep 08 #Javascript
使用js和canvas实现时钟效果
Sep 08 #Javascript
javascript使用canvas实现饼状图效果
Sep 08 #Javascript
vue配置多代理服务接口地址操作
Sep 08 #Javascript
You might like
在服务端进行目录建立、删除,文件上传、删除的过程的php代码
2008/09/10 PHP
PHP goto语句简介和使用实例
2014/03/11 PHP
php mysqli查询语句返回值类型实例分析
2016/06/29 PHP
Laravel框架实现定时发布任务的方法
2018/08/16 PHP
Laravel源码解析之路由的使用和示例详解
2018/09/27 PHP
Javascript-Mozilla和IE中的一个函数直接量的问题分析
2007/08/12 Javascript
jQuery筛选器children()案例详解(图文)
2013/02/17 Javascript
javascript中创建对象的几种方法总结
2013/11/01 Javascript
JQuery替换DOM节点的方法
2015/06/11 Javascript
javascript框架设计之框架分类及主要功能
2015/06/23 Javascript
深入浅析JavaScript系列(13):This? Yes,this!
2016/01/05 Javascript
jquery封装插件时匿名函数形参和实参的写法解释
2017/02/14 Javascript
打造通用的匀速运动框架(实例讲解)
2017/10/17 Javascript
JS实现中英文混合文字溢出友好截取功能
2018/08/06 Javascript
element ui 表格动态列显示空白bug 修复方法
2018/09/04 Javascript
使用konva和vue-konva库实现拖拽滑块验证功能
2020/04/27 Javascript
2分钟实现一个Vue实时直播系统的示例代码
2020/06/05 Javascript
vue基于better-scroll实现左右联动滑动页面
2020/06/30 Javascript
js实现翻牌小游戏
2020/07/31 Javascript
vue print.js打印支持Echarts图表操作
2020/11/13 Javascript
Python 拷贝对象(深拷贝deepcopy与浅拷贝copy)
2008/09/06 Python
python使用正则表达式分析网页中的图片并进行替换的方法
2015/03/26 Python
Windows系统下使用flup搭建Nginx和Python环境的方法
2015/12/25 Python
Python算法输出1-9数组形成的结果为100的所有运算式
2017/11/03 Python
Vue的el-scrollbar实现自定义滚动
2018/05/29 Python
Python continue继续循环用法总结
2018/06/10 Python
在Pytorch中计算自己模型的FLOPs方式
2019/12/30 Python
Python生成器传参数及返回值原理解析
2020/07/22 Python
高清屏下canvas重置尺寸引发的问题的解决
2019/10/14 HTML / CSS
英国口碑最好的的维他命胶囊品牌:Myvitamins(有中文站)
2016/12/03 全球购物
方正Java笔试题
2014/07/03 面试题
人力资源行政经理自我评价
2013/10/23 职场文书
董事长秘书岗位职责
2013/11/29 职场文书
人事科岗位职责范本
2014/03/02 职场文书
甜品店创业计划书
2014/08/14 职场文书
2014学习十八届四中全会精神思想汇报范文
2014/10/23 职场文书