请选择 进入手机版 | 继续访问电脑版

无忧编程_ASP.NET  / C# / PHP 程序员的软件世界

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1387|回复: 0

JS实现数组去重的方法函数(重复的元素只保留一个)

[复制链接]

423

主题

456

帖子

1901

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1901
发表于 2019-8-7 16:58:41 | 显示全部楼层 |阅读模式
JS实现数组去重的方法函数(重复的元素只保留一个)
1.遍历数组法
它是最简单的数组去重方法(indexOf方法)
实现思路:新建一个数组,遍历去要重的数组,当值不在新数组的时候(indexOf为-1)就加入该新数组中;
var arr=[2,8,5,0,5,2,6,7,2];function unique1(arr){  var hash=[];  for (var i = 0; i < arr.length; i++) {     if(hash.indexOf(arr)==-1){      hash.push(arr);     }  }  return hash;}
2.数组下标判断法
调用indexOf方法,性能和方法1差不多
实现思路:如果当前数组的第 i 项在当前数组中第一次出现的位置不是 i,那么表示第 i 项是重复的,忽略掉。否则存入结果数组。
function unique2(arr){  var hash=[];  for (var i = 0; i < arr.length; i++) {     if(arr.indexOf(arr)==i){      hash.push(arr);     }  }  return hash;}
3.排序后相邻去除法
实现思路:给传入的数组排序,排序后相同的值会相邻,然后遍历排序后数组时,新数组只加入不与前一值重复的值。
function unique3(arr){  arr.sort();  var hash=[arr[0]];  for (var i = 1; i < arr.length; i++) {     if(arr!=hash[hash.length-1]){      hash.push(arr);     }  }  return hash;}
4.优化遍历数组法(推荐)
实现思路:双层循环,外循环表示从0到arr.length,内循环表示从i+1到arr.length
将没重复的右边值放入新数组。(检测到有重复值时终止当前循环同时进入外层循环的下一轮判断)

function unique4(arr){  var hash=[];  for (var i = 0; i < arr.length; i++) {    for (var j = i+1; j < arr.length; j++) {      if(arr===arr[j]){        ++i;      }    }      hash.push(arr);  }  return hash;}

5.ES6实现
基本思路:ES6提供了新的数据结构Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。
Set函数可以接受一个数组(或类似数组的对象)作为参数,用来初始化。
function unique5(arr){  var x = new Set(arr); return [...x];}
扩展:如果重复,则去掉该元素
数组下标去重

function unique22(arr){  var hash=[];  for (var i = 0; i < arr.length; i++) {     if(arr.indexOf(arr)==arr.lastIndexOf(arr)){      hash.push(arr);     }  }  return hash;}
参考资料:https://www.cnblogs.com/jiayuexuan/p/7527055.html


windows .net(C#+MSSQL) linux(php+mysql)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|软件编程 ( 鄂ICP备11006601号 )鄂公网安备 42011102001337号 |

GMT+8, 2019-12-10 05:24 , Processed in 0.056778 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表