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中append()与appendto()用法分析
Nov 14 Javascript
javascript制作2048游戏
Mar 30 Javascript
JS打字效果的动态菜单代码分享
Aug 21 Javascript
javascript断点调试心得分享
Apr 23 Javascript
jquery树形菜单效果的简单实例
Jun 06 Javascript
基于jQuery实现表格的查看修改删除
Aug 01 Javascript
JavaScript中object和Object的区别(详解)
Feb 27 Javascript
详解webpack2+node+react+babel实现热加载(hmr)
Aug 24 Javascript
Javascript中prototype与__proto__的关系详解
Mar 11 Javascript
vue移动端屏幕适配详解
Apr 30 Javascript
ES6数组与对象的解构赋值详解
Jun 14 Javascript
JavaScript, select标签元素左右移动功能实现
May 14 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实现百度网盘图片直链的代码分享
2012/11/01 PHP
php遍历文件夹所有文件子文件夹函数代码
2013/11/27 PHP
配置Nginx+PHP的正确思路与过程
2016/05/10 PHP
PHP数组的定义、初始化和数组元素的显示实现代码
2016/11/05 PHP
Laravel 5.5 的自定义验证对象/类示例代码详解
2017/08/29 PHP
laravel excel 上传文件保存到本地服务器功能
2019/11/14 PHP
直接生成打开窗口代码,不必下载
2008/05/14 Javascript
一个判断email合法性的函数[非正则]
2008/12/09 Javascript
用Javascript实现Sleep暂停功能代码
2010/09/03 Javascript
JQuery自适应IFrame高度(支持嵌套 兼容IE,ff,safafi,chrome)
2011/03/28 Javascript
jQuery右键菜单contextMenu使用实例
2011/09/28 Javascript
JavaScript作用域链使用介绍
2013/08/29 Javascript
node.js中的console.info方法使用说明
2014/12/09 Javascript
javascript自动切换焦点控制效果完整实例
2016/02/02 Javascript
纯JS代码实现气泡效果
2016/05/04 Javascript
自定义PC微信扫码登录样式写法
2017/12/12 Javascript
OpenLayers加载缩放控件使用方法详解
2020/09/25 Javascript
Python调用C++程序的方法详解
2017/01/24 Python
Python利用字典将两个通讯录文本合并为一个文本实例
2018/01/16 Python
详解Python核心对象类型字符串
2018/02/11 Python
Python实现的根据IP地址计算子网掩码位数功能示例
2018/05/23 Python
Pandas 合并多个Dataframe(merge,concat)的方法
2018/06/08 Python
Python求解任意闭区间的所有素数
2018/06/10 Python
django认证系统实现自定义权限管理的方法
2018/07/16 Python
详解PyCharm+QTDesigner+PyUIC使用教程
2019/06/13 Python
通过字符串导入 Python 模块的方法详解
2019/10/27 Python
Python爬取12306车次信息代码详解
2020/08/12 Python
python 监控logcat关键字功能
2020/09/04 Python
python pip如何手动安装二进制包
2020/09/30 Python
Python通过yagmail实现发送邮件代码解析
2020/10/27 Python
Boden澳大利亚官网:英国在线服装公司
2018/08/05 全球购物
大型晚会策划方案
2014/02/06 职场文书
幼儿园门卫岗位职责范本
2014/07/02 职场文书
2015年党员承诺书
2015/01/21 职场文书
2015年小学数学教研组工作总结
2015/05/21 职场文书
2016年社区中秋节活动总结
2016/04/05 职场文书