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 全兼容可高亮二级缓冲折叠菜单
Jun 04 Javascript
详解强大的jQuery选择器之基本选择器、层次选择器
Feb 07 Javascript
jquery跟js初始化加载的多种方法及区别介绍
Apr 02 Javascript
基于JavaScript实现瀑布流布局(二)
Jan 26 Javascript
JS原型、原型链深入理解
Feb 27 Javascript
BootStrap下拉菜单和滚动监听插件实现代码
Sep 26 Javascript
JSON对象 详解及实例代码
Oct 18 Javascript
js实现上下左右弹框划出效果
Mar 08 Javascript
Vue的百度地图插件尝试使用
Sep 06 Javascript
从setTimeout看js函数执行过程
Dec 19 Javascript
Webpack打包字体font-awesome的方法示例
Apr 26 Javascript
vue 组件销毁并重置的实现
Jan 13 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 会话(session 时间设定)使用入门代码
2008/06/05 PHP
php简单对象与数组的转换函数代码(php多层数组和对象的转换)
2011/05/18 PHP
查找mysql字段中固定字符串并替换的几个方法
2012/09/23 PHP
php如何解决无法上传大于8M的文件问题
2014/03/10 PHP
php下pdo的mysql事务处理用法实例
2014/12/27 PHP
PHP中的替代语法介绍
2015/01/09 PHP
解决微信授权回调页面域名只能设置一个的问题
2016/12/11 PHP
一个js写的日历(代码部分网摘)
2009/09/20 Javascript
遍历jquery对象的代码分享
2011/11/02 Javascript
jquery插件制作 自增长输入框实现代码
2012/08/17 jQuery
用jquery中插件dialog实现弹框效果实例代码
2013/11/15 Javascript
Jquery中offset()和position()的区别分析
2015/02/05 Javascript
后端接收不到AngularJs中$http.post发送的数据原因分析及解决办法
2016/07/05 Javascript
js中string和number类型互转换技巧(分享)
2016/11/28 Javascript
JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)
2016/12/14 Javascript
利用Bootstrap实现表格复选框checkbox全选
2016/12/21 Javascript
Vue2.5 结合 Element UI 之 Table 和 Pagination 组件实现分页功能
2018/01/26 Javascript
vue图片上传本地预览组件使用详解
2019/02/20 Javascript
JavaScript 面向对象基础简单示例
2019/10/02 Javascript
jQuery使用ajax传递json对象到服务端及contentType的用法示例
2020/03/12 jQuery
[01:33:14]LGD vs VP Supermajor 败者组决赛 BO3 第二场 6.10
2018/07/04 DOTA
Python编码类型转换方法详解
2016/07/01 Python
基于Python_脚本CGI、特点、应用、开发环境(详解)
2017/05/23 Python
Python列表推导式、字典推导式与集合推导式用法实例分析
2018/02/07 Python
Python2包含中文报错的解决方法
2018/07/09 Python
Python3 itchat实现微信定时发送群消息的实例代码
2019/07/12 Python
Python搭建代理IP池实现接口设置与整体调度
2019/10/27 Python
python基于exchange函数发送邮件过程详解
2020/11/06 Python
美国最大的在线水培用品商店:GrowersHouse.com
2018/08/14 全球购物
美国新娘礼品店:The Paisley Box
2020/09/08 全球购物
护士自我鉴定
2013/10/23 职场文书
工业学校毕业生自荐书
2014/01/03 职场文书
建筑节能汇报材料
2014/08/22 职场文书
员工生日活动方案
2014/08/24 职场文书
2015年暑期见闻
2015/07/14 职场文书
检举信的写法
2019/04/10 职场文书