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 相关文章推荐
JavaScript设置IFrame高度自适应(兼容各主流浏览器)
Jun 05 Javascript
JS实现点击图片在当前页面放大并可关闭的漂亮效果
Oct 18 Javascript
jQuery中:has选择器用法实例
Dec 30 Javascript
JQuery中两个ul标签的li互相移动实现方法
May 18 Javascript
jQuery实现时尚漂亮的弹出式对话框实例
Aug 07 Javascript
jQuery使用$.ajax进行异步刷新的方法(附demo下载)
Dec 04 Javascript
JS实现匀加速与匀减速运动的方法示例
Sep 04 Javascript
详解vue axios中文文档
Sep 12 Javascript
jquery引入外部CDN 加载失败则引入本地jq库
May 23 jQuery
webpack 样式加载的实现原理
Jun 12 Javascript
Java Varargs 可变参数用法详解
Jan 28 Javascript
element多个表单校验的实现
May 27 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 fopen 读取带中文URL地址的一点见解
2012/09/25 PHP
浅析application/x-www-form-urlencoded和multipart/form-data的区别
2014/06/22 PHP
PHP实现支持加盐的图片加密解密
2016/09/09 PHP
PHP Trait代码复用类与多继承实现方法详解
2019/06/17 PHP
浅谈PHP中的那些魔术常量
2020/12/02 PHP
利用ajaxfileupload插件实现文件上传无刷新的具体方法
2013/06/08 Javascript
js判断undefined类型示例代码
2014/02/10 Javascript
jQuery调取jSon数据并展示的方法
2015/01/29 Javascript
jQuery版本升级踩坑大全
2016/01/12 Javascript
Bootstrap每天必学之响应式导航、轮播图
2016/04/25 Javascript
vue2中filter()的实现代码
2017/07/09 Javascript
js 事件的传播机制(实例讲解)
2017/07/20 Javascript
ReactNative Image组件使用详解
2017/08/07 Javascript
fetch 使用及如何接收JS传值
2017/11/11 Javascript
解决Js先触发失去焦点事件再执行点击事件的问题
2018/08/30 Javascript
React 路由懒加载的几种实现方案
2018/10/23 Javascript
使用apifm-wxapi模块中的问题及解决方法
2019/08/05 Javascript
countUp.js实现数字动态变化效果
2019/10/17 Javascript
React中获取数据的3种方法及优缺点
2020/02/18 Javascript
JavaScript检测是否开启了控制台(F12调试工具)
2020/10/02 Javascript
python3.5实现socket通讯示例(TCP)
2017/02/07 Python
python字符串Intern机制详解
2019/07/01 Python
Python3.7基于hashlib和Crypto实现加签验签功能(实例代码)
2019/12/04 Python
python中JWT用户认证的实现
2020/05/18 Python
Python smtp邮件发送模块用法教程
2020/06/15 Python
如何完美的建立一个python项目
2020/10/09 Python
美国在线家装零售商:Build.com
2016/09/02 全球购物
英国家电购物网站:Sonic Direct
2019/03/26 全球购物
下述程序的作用是计算机数组中的最大元素值及其下标
2012/11/26 面试题
建筑施工实习自我鉴定
2013/09/19 职场文书
配件采购员岗位职责
2013/12/03 职场文书
优秀广告词大全
2014/03/19 职场文书
供货协议书
2014/04/22 职场文书
高三学生评语大全
2014/04/25 职场文书
2016庆祝国庆67周年宣传语
2015/11/25 职场文书
Golang bufio详细讲解
2022/04/21 Golang