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实现拖动示例代码
Nov 01 Javascript
js中一个函数获取另一个函数返回值问题探讨
Nov 21 Javascript
html5+javascript制作简易画板附图
Apr 25 Javascript
Javascript基础教程之if条件语句
Jan 18 Javascript
jQuery源码分析之Callbacks详解
Mar 13 Javascript
jQuery实现div随意拖动的实例代码(通用代码)
Jan 28 Javascript
探寻JavaScript中this指针指向
Apr 23 Javascript
AngularJS基础 ng-open 指令简单实例
Aug 02 Javascript
vue如何实现自定义底部菜单栏
Jul 01 Javascript
使用layer.msg 时间设置不起作用的解决方法
Sep 12 Javascript
JavaScript键盘事件响应顺序详解
Sep 30 Javascript
OpenLayers3实现鼠标移动显示坐标
Sep 25 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调用MsSQL存储过程使用内置RETVAL获取过程中的return值
2013/07/03 PHP
PHP面向对象程序设计之命名空间与自动加载类详解
2016/12/02 PHP
PHP实现图的邻接矩阵表示及几种简单遍历算法分析
2017/11/24 PHP
js函数使用技巧之 setTimeout(function(){},0)
2009/02/09 Javascript
JavaScript Event学习第十章 一些可替换的事件对
2010/02/10 Javascript
IE6不能修改NAME问题的解决方法
2010/09/03 Javascript
js判断生效时间不得大于失效时间的思路及代码
2013/04/23 Javascript
jQuery中常用的遍历函数用法实例总结
2015/09/01 Javascript
利用jQuery设计一个简单的web音乐播放器的实例分享
2016/03/08 Javascript
关于JavaScript和jQuery的类型判断详解
2016/10/08 Javascript
推荐10款扩展Web表单的JS插件
2017/12/25 Javascript
详解基于Koa2开发微信二维码扫码支付相关流程
2018/05/16 Javascript
[02:01]大师之路——DOTA2完美大师赛11月论剑上海
2017/11/06 DOTA
python选择排序算法实例总结
2015/07/01 Python
python生成验证码图片代码分享
2016/01/28 Python
Python中列表、字典、元组数据结构的简单学习笔记
2016/03/20 Python
用生成器来改写直接返回列表的函数方法
2017/05/25 Python
使用python批量读取word文档并整理关键信息到excel表格的实例
2018/11/07 Python
解决pyCharm中 module 调用失败的问题
2020/02/12 Python
Django ValuesQuerySet转json方式
2020/03/16 Python
Python下划线5种含义代码实例解析
2020/07/10 Python
CSS3使用transition实现的鼠标悬停淡入淡出
2015/01/09 HTML / CSS
1688平价精选商城:阿里集团旗下,工厂出厂价格直销
2017/04/24 全球购物
新西兰第一的行李箱网站:luggage.co.nz
2019/07/22 全球购物
英语演讲稿范文
2014/01/03 职场文书
《黄河颂》教学反思
2014/02/07 职场文书
课内比教学心得体会
2014/09/09 职场文书
设备收款委托书范本
2014/10/02 职场文书
单方离婚协议书范本2014
2014/10/28 职场文书
大学生思想道德自我评价
2015/03/09 职场文书
初中教师德育工作总结2015
2015/05/12 职场文书
小组口号霸气押韵
2015/12/24 职场文书
《观察物体》教学反思
2016/02/17 职场文书
python中sqllite插入numpy数组到数据库的实现方法
2021/06/21 Python
SpringBoot集成Redis的思路详解
2021/10/16 Redis
悬疑名作《朋友游戏》动画无字ED宣传片 新角色公开
2022/04/13 日漫