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 相关文章推荐
JS使用replace()方法和正则表达式进行字符串的搜索与替换实例
Apr 10 Javascript
node.js中的fs.chmod方法使用说明
Dec 18 Javascript
JavaScript实现定时隐藏与显示图片的方法
Aug 06 Javascript
js获取iframe中的window对象的实现方法
May 20 Javascript
Jquery Easyui选项卡组件Tab使用详解(10)
Dec 18 Javascript
JS封装通过className获取元素的函数示例
Dec 20 Javascript
JS对象序列化成json数据和json数据转化为JS对象的代码
Aug 23 Javascript
react学习笔记之state以及setState的使用
Dec 07 Javascript
使用vue实现grid-layout功能实例代码
Jan 05 Javascript
JS模拟实现哈希表及应用详解
May 04 Javascript
基于JS实现父组件的请求服务过程解析
Oct 14 Javascript
vue实现移动端返回顶部
Oct 12 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中路径问题的解决方案
2006/10/09 PHP
PHP MySql增删改查的简单实例
2016/06/21 PHP
javascript 简单高效判断数据类型 系列函数 By shawl.qiu
2007/03/06 Javascript
JavaScript 设计模式学习 Singleton
2009/07/27 Javascript
JavaScript打字小游戏代码
2011/12/26 Javascript
JS判断当前日期是否大于某个日期的实现代码
2012/09/02 Javascript
如何获取select下拉框的值(option没有及有value属性)
2013/11/08 Javascript
javascript  数组排序与对象排序的实例
2017/07/17 Javascript
mpvue构建小程序的方法(步骤+地址)
2018/05/22 Javascript
vue.js实现带日期星期的数字时钟功能示例
2018/08/28 Javascript
详解jenkins自动化部署vue
2019/05/14 Javascript
Vue CLI项目 axios模块前后端交互的使用(类似ajax提交)
2019/09/01 Javascript
js校验开始时间和结束时间
2020/05/26 Javascript
JavaScript事件循环及宏任务微任务原理解析
2020/09/02 Javascript
[01:19]DOTA2城市挑战赛报名开始 开启你的城市传奇
2018/03/23 DOTA
python调用opencv实现猫脸检测功能
2019/01/15 Python
python爬虫selenium和phantomJs使用方法解析
2019/08/08 Python
如何基于python实现脚本加密
2019/12/28 Python
python如何求数组连续最大和的示例代码
2020/02/04 Python
tensorflow多维张量计算实例
2020/02/11 Python
Idea安装python显示无SDK问题解决方案
2020/08/12 Python
Python经纬度坐标转换为距离及角度的实现
2020/11/01 Python
浅谈CSS3特性查询(Feature Query: @supports)功能简介
2017/07/31 HTML / CSS
html5 制作地图当前定位箭头的方法示例
2020/01/10 HTML / CSS
印度网上购物首选目的地:Flipkart
2016/08/01 全球购物
eBay英国购物网站:eBay.co.uk
2019/06/19 全球购物
存储过程的优缺点是什么
2015/01/10 面试题
财务会计专业应届毕业生求职信
2013/10/18 职场文书
美发店5.1活动方案
2014/01/24 职场文书
继承公证书样本
2014/04/04 职场文书
广告艺术设计专业自荐书
2014/07/08 职场文书
经典演讲稿开场白
2014/08/25 职场文书
爱的奉献演讲稿
2014/09/10 职场文书
后天观后感
2015/06/08 职场文书
婚礼父母致辞
2015/07/28 职场文书
mysql sql常用语句大全
2022/06/21 MySQL