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. Ubuntu14.04安装Go语言开发环境

    1.使用apt-get命令来安装Go环境 apt-get install software-properties-common apt-get install python-software-prop ...

  2. 【python基础】之list列表

    python提供了一个被称为列表的数据类型,他可以存储一个有序的元素集合. 记住:一个列表可以存储任意大小的数据集合.列表是可变对象,有别于字符串str类,str类是不可变对象. 1.创建一个列表 l ...

  3. Wireshark网络抓包(一)——数据包、着色规则和提示

    一.数据包详细信息 Packet Details面板内容如下,主要用于分析封包的详细信息. 帧:物理层.链路层 包:网络层 段:传输层.应用层 1)Frame 物理层数据帧概况 2)Ethernet ...

  4. 制作jar文件

    一.制作可运行jar文件 使用java的swing.awt制作了一个简单的界面交互模块.程序打成jar包后,能双击运行,制作过程: 1.eclipse →properties →Export,选择ja ...

  5. vs基础:无法断点调试dll项目 无法命中

    调试vs时,经常会出现,你设置了dll项目的一些断点,可f5之后,这些断点无效.时代定制的程序组的童鞋告诉你解决方法:在解决方案上右键“属性”,点击左侧树“配置属性”-->“配置”,右侧项目列表 ...

  6. java中的final与static

    许多程序设计语言都有自己的办法告诉编译器某个数据是"常数".常数主要应用于下述两个方面: (1) 编译期常数,它永远不会改变 (2) 在运行期初始化的一个值,我们不希望它发生变化 ...

  7. Swift 2.0 自定义cell和不同风格的cell

    昨天我们写了使用系统的cell怎样创建tableView,今天我们再细分一下,就是不同风格的cell,我们怎写代码.先自己创建一个cell,继承于UItableviewcell 我们看看 cell 里 ...

  8. iOS 开发之Block

    iOS 开发之Block 一:什么是Block.Block的作用 UI开发和网络常见功能的实现回调,按钮事件的处理方法是回调方法. 1.     按钮事件 target action 机制. 它是将一 ...

  9. node将excel内容转json

    小颖分享的这个方法,前提是你已经安装了node,如果大家不知道自己是否安装过node可以打开cmd,然后执行:node -v,如果安装过,你会看到你安装的node版本号,如果没有安装请先安装node. ...

  10. [Hadoop] - Cannot run program "cmake"

    在编译hadoop的过程中,遇到缺少cmake命令的异常,异常信息为:Cannot run program "cmake" (in directory "/opt/wor ...