1、实现目标:数组去重

2、实现思路:

(1)创建新数组。

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

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

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

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

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

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

 function unique( arr ) {
var n = [];
for (var i = 0, length = arr.length; i < length; i++) {
if ( n.indexOf( arr[i] ) === -1 ) {
n.push( arr[i] );
};
}
return n;
};

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

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

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

 function unique( arr ) {
arr.sort();
var r = [];
for (var i = 1, length = arr.length; i < length; i++) {
if ( arr[i] !== arr[i - 1] ) {
r.push( arr[i] );
};
};
return r;
};

4、小结:

(1)基于数组位置:

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

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

(2)基于数组分布:

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

(3)基于数组排序:

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

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

  1. JavaScript 实现数组去重

    JavaScript 实现数组去重 演示Demo 数组去重 // 方法一 function unique1(a) { var res = []; for (var i = 0, len = a.len ...

  2. JavaScript中数组去重的几种方法

    JavaScript中数组去重的几种方法 正常情况下,数据去重的工作一般都是由后端同事来完成的,但是前端也要掌握好处理数据的能力,万一去重的工作交给我们大前端处理,我们也不能怂呀.现在我总结了一些去重 ...

  3. JavaScript实现数组去重方法

    一.利用ES6 Set去重(ES6中最常用) function unique (arr) { return Array.from(new Set(arr)) } var arr = [1,1,'tru ...

  4. JavaScript之数组去重

    前言:昨天看到了别人发的帖子,谈到了面试题中经常出现的数组去重的问题.作为一个热爱学习.喜欢听老师话的好孩纸,耳边忽然想起来高中老师的谆谆教导:不要拿到题就先看答案,要先自己思考解答,然后再对照答案检 ...

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

    最近比较忙,没时间更新博客,等忙完这阵子会整理一篇使用AngularJS构建一个中型的单页面应用(SPA)的文章,尽情期待!先占个坑. 数组去重的算法有很多种,以下是一种. 思路如下: 定义一个空的对 ...

  6. JavaScript 高性能数组去重

    中午和同事吃饭,席间讨论到数组去重这一问题 我立刻就分享了我常用的一个去重方法,随即被老大指出这个方法效率不高 回家后我自己测试了一下,发现那个方法确实很慢 于是就有了这一次的高性能数组去重研究 一. ...

  7. Javascript作业—数组去重(要求:原型链上添加函数)

    数组去重(要求:原型链上添加函数) <script> //数组去重,要求:在原型链上添加函数 //存储不重复的--仅循环一次 if(!Array.prototype.unique1){ A ...

  8. 【转】JavaScript 高性能数组去重

    原文地址:https://www.cnblogs.com/wisewrong/p/9642264.html 一.测试模版 数组去重是一个老生常谈的问题,网上流传着有各种各样的解法 为了测试这些解法的性 ...

  9. Javascript实现数组去重 [转]

    1.遍历数组法 它是最简单的数组去重方法(indexOf方法) 实现思路:新建一个数组,遍历去要重的数组,当值不在新数组的时候(indexOf为-1)就加入该新数组中: var arr=[2,8,5, ...

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

                                    方法很巧妙 但是要事先知道对应的name或其他属性名称 主键值只适用于已知数据对象进行调用: var arr1 = [{ name: ' ...

随机推荐

  1. SQL SERVER 运维日记-数据库备份

    概述 昨天下午突然看到,<炉石传说>游戏数据库发生宕机并引发数据丢失事故的新闻.刚看到时,满满的不可思议.暴雪啊,网易啊. 都是很牛叉的公司.他们出的游戏我都是很喜欢的. 当我看到,第一时 ...

  2. SDWebImage源码解读之SDWebImageManager

    第九篇 前言 SDWebImageManager是SDWebImage中最核心的类了,但是源代码确是非常简单的.之所以能做到这一点,都归功于功能的良好分类. 有了SDWebImageManager这个 ...

  3. 离职了,在家温故而知新----1 设计模式 & 开头

    工作四年有余,编写的代码都是业务代码.不涉及低层. 目前离职在家,过年完了,准备找工作了. 决定温故而知新,复习也是学习. 本着随遇而安的原则,随便从之前设计的众多条目中选择了一条开始复习. 设计模式 ...

  4. display的none与block(判断登录界面的账号密码是否为空)

    判断登录界面的账号密码是否为空的时候又不想用alert显示就需要用display来隐藏alert啦(在设置时切忌要将隐藏的内容写在账号和密码的div中,否则会根据屏幕的分辨率不同而有所变化,这是本人教 ...

  5. 简学Python第一章__进入PY的世界

    #cnblogs_post_body h2 { background: linear-gradient(to bottom, #18c0ff 0%,#0c7eff 100%); color: #fff ...

  6. cmake工具链

    命令project() enable_language()try_compile() 变量CMAKE_<LANG>_COMPILERCMAKE_<LANG>_COMPILER_ ...

  7. sass 基础——回顾

    1.webstorm 自动编译SASS 下载安装包 http://rubyinstaller.org/downloads/ 然后点击安装,路径为默认路径就行, 勾选以下两项 add Ruby exec ...

  8. Java生成、解析二维码

    今天遇到需求,使用Java生成二维码图片,网搜之后,大神们早就做过,个人总结一下. 目标:借助Google提供的ZXing Core工具包,使用Java语言实现二维码的生成和解析. 步骤如下: 1.m ...

  9. bootstrap-标签页

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. PCB信号集

    每一个进程都有一个pcb进程控制块,用来控制进程的信息,同时信号在pcb中有两个队列去维护他,一个是未决信号集,每一位对应一个信号的状态,0,1,1表示未决态,另一个是信号屏蔽字(阻塞信号集),也就0 ...