JavaScript tips:数组去重

1、实现目标:数组去重

2、实现思路:

(1)创建新数组。

(2)遍历原数组,判断当前被遍历元素是否存在于新数组,如果存在于新数组,则判断当前被遍历元素是重复的;如果不存在于新数组,则判断当前被遍历元素不是重复的,则将其压入新数组。

(3)遍历完毕原数组后,返回新数组。

3、具体实现:根据对当前元素是否重复的判断方法不同,有四种不同的具体实现。

(1)利用hash表保存被遍历元素是否重复的状态。

 1 function unique( arr ) {
 2   var n = {}, //hash表,用于判断元素是否已经压入新数组
 3       r = [];
 4   for (var i = 0, length = arr.length; i < length; i++) {
 5     // 如果当前元素已经被压入新数组,hash表中的值则为true,据此判断其是否重复
 6     if ( !n[ arr[i] ] ) {
 7       n[ arr[i] ] = true;
 8       r.push( arr[i] );
 9     };
10   };
11   return r;
12 };

(2)利用indexOf方法,判断当前被遍历元素是否在新数组中。

1 function unique( arr ) {
2   var n = [];
3   for (var i = 0, length = arr.length; i < length; i++) {
4     if ( n.indexOf( arr[i] ) === -1 ) {
5       n.push( arr[i] );
6     };
7   }
8   return n;
9 };

(3)利用当前被遍历元素在原数组第一次出现的位置与其索引是否相等判断是否重复。

 1 function unique( arr ) {
 2   var n = [];
 3   for (var i = 0, length = arr.length; i < length; i++) {
 4     //如果当前数组的第i项在当前数组中第一次出现的位置不是i,那么表示第i项是重复的,忽略掉。否则存入新数组
 5     if ( arr.indexOf( arr[i] ) === i ) {
 6       n.push( arr[i] );
 7     };
 8   };
 9   return n;
10 };

(4)利用当前被遍历元素在原数组中第一次出现的位置和最后出现的位置是否相同判断是否重复。

 1 function unique( arr ) {
 2   var n = [];
 3   for (var i = 0, length = arr.length; i < length; i++) {
 4     //如果当前数组的第i项在当前数组中第一次出现的位置和最后一次出现的位置是否相等
 5     if ( arr.indexOf( arr[i] ) === arr.lastIndexOf( arr[i] ) ) {
 6       n.push( arr[i] );
 7     };
 8   };
 9   return n;
10 }

(5)利用数组的排序方法,先排序,利用排序后的数组特性,亦即相同值的元素相邻,来判断是否重复。

 1 function unique( arr ) {
 2   arr.sort();
 3   var r = [];
 4   for (var i = 1, length = arr.length; i < length; i++) {
 5     if ( arr[i] !== arr[i - 1] ) {
 6       r.push( arr[i] );
 7     };
 8   };
 9   return r;
10 };

4、小结:

(1)基于数组位置:

第二种,从当前元素是否出现在新数组中判断是否重复;

第三种,根据当前元素第一次出现的位置和当前被遍历元素下标是否相等判断是否重复;

第四种,根据当前元素第一次出现的位置和最后一次出现的位置判断是否重复;

(2)基于数组分布:

第一种,建hash表,保存数组元素的分布状态,遍历数组时,根据分布状态判断是否重复;

(3)基于数组排序:

第五种,先对数组排序,利用排序后,相同值数组元素相邻的特性,判断元素是否重复。

时间: 2024-07-29 08:41:47

JavaScript tips:数组去重的相关文章

JavaScript实现数组去重方法

一.利用ES6 Set去重(ES6中最常用) function unique (arr) { return Array.from(new Set(arr)) } var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}]; console.log(unique(arr)) //[1, "true&quo

使用JavaScript进行数组去重——一种高效的算法

最近比较忙,没时间更新博客,等忙完这阵子会整理一篇使用AngularJS构建一个中型的单页面应用(SPA)的文章,尽情期待!先占个坑. 数组去重的算法有很多种,以下是一种. 思路如下: 定义一个空的对象obj: 循环数组arr,判断obj[arr[i]]是否为false,如果是则将该数组元素放到result中,并且将obj[arr[i]]置为true: obj[arr[0]]肯定为false,因为obj为空,arr[0]将被放到result中,并且obj[arr[0]]被置为true: 循环的过

javascript实现数组去重

数组去重即去掉数组中重复的元素,是web前端工作者在面试过程中和工作中经常会遇到的一个问题,相信一般的方法大家都会,只不过会存在效率差异问题,下面我就来说说我们常用的几种数组去重的方法! 方法1,思路:通过双重循环,每次检测新数组里面是否有该元素,没有就加进去,改方法思路简单,但当数组长度较长时,会非常影响性能!(不推荐使用) function deleteRepeat1(arr) { var newArr = []; for (var i = 0; i < arr.length; i++) {

JavaScript之数组去重

前言:昨天看到了别人发的帖子,谈到了面试题中经常出现的数组去重的问题.作为一个热爱学习.喜欢听老师话的好孩纸,耳边忽然想起来高中老师的谆谆教导:不要拿到题就先看答案,要先自己思考解答,然后再对照答案检验.于是我便开始了独立思考的过程: 首先,我想到的是另建一个结果数组,用来存储原始数组中不重复的数据.遍历原始数组依次跟结果数组中的元素进行比较,检测是否重复.于是乎,我写出了如下代码A: 1 Array.prototype.clearRepetitionA = function(){ 2 var

javascript中数组去重的4种方法

面试前端必须准备的一道问题:怎样去掉Javascript的Array的重复项.在最近面试中,百度.腾讯.盛大等都在面试里出过这个题目.这个问题看起来简单,但其实暗藏杀机. 考的不仅仅是实现这个功能,更能看出你对计算机程序执行的深入理解. 我总共想出了三种算法来实现这个目的: 方法一: Array.prototype.unique1 = function() {     var n = []; //一个新的临时数组     for(var i = 0; i < this.length; i++)

JavaScript (jquery) 数组去重的算法探讨

方法很巧妙 但是要事先知道对应的name或其他属性名称 主键值只适用于已知数据对象进行调用: var arr1 = [{ name: 'C30' }, { name: 'C35' }, { name: 'C40' }, { name: 'C45' }, { name: 'C50' }, { name: 'C60' }, { name: 'C55'}]; //取到strength设定中的列表 var arr2 = [{ name: 'C30' }, { name: 'C35'}]; //取到当前合

原生JavaScript对象数组去重,重构为对象{pro1:[hash], pro02: [hash]}

function unique(objArr) { var result = {}; var proObj = objArr[0]; for(var pro in proObj){ var hash = []; for(var i = 0; i < objArr.length; i++){ var obj = objArr[i]; for(var pros in obj){ if(pros === pro){ var val = obj[pros]; if(!hash[val]){ var va

javaScript数组去重方法

在JAvascript平时项目开发中经常会用到数组去重的操作.这时候就要用到JS数组去重的方法了. demo1: 第一种:JS数组去重操作方法是利用遍历原数组,利用数组的indexOf()方法来来判断新数组b中是否有原数组a中的元素,如果没有的话则在b数组的后面追加上a[i],如果有的话就不执行任何操作,最后可以达到数组去重的操作. 这种方法应该是平时开发中最常用的JS数组去重的方法了,简单又实用. demo2: 第二种去重的方法比较巧妙,是定义一个空对象和一个空数组,在遍历原数组的时候来用原数

javaScript常见的五种数组去重(转载)

JavaScript的数组去重问题在许多面试中都会遇到,现在做个总结 先来建立一个数组 var arr = [1,2,3,3,2,'我','我',34,'我的',NaN,NaN]; ▓▓▓▓▓▓ 第一种 思路:建立一个临时数组,用for循环去依次判断arr中的每个项在临时数组中是否有相同的值,如果没有则将这个值添加到临时数组,如果有相同的值则不添加,最后返回这个临时数组 代码: 1 Array.prototype.removeDuplicate = function(){ 2 var n = [

JS实现字符串去重,数组去重

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>去重</title> 6 </head> 7 <body> 8 <script type="text/javascript"> 9 /*数组去重*/ 10 function quch