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. 多线程方式实现Socket通信

    一.首先,介绍下两类传输协议:TCP:UDP TCP是Tranfer Control Protocol的 简称,是一种面向连接的保证可靠传输的协议.通过TCP协议传输,得到的是一个顺序的无差错的数据流 ...

  2. 笑谈ArcToolbox (1) ArcToolbox 的发展方向

    笑谈ArcToolbox (1) ArcToolbox 的发展方向 by 李远祥 ArcGIS工具箱ArcToolbox具有非常多的工具,相信用过的人都非常惊叹,其功能完备并且强大,种类繁多,总能找到 ...

  3. 重新学习WCF

    近来工作不怎么忙,一直在想一个问题,今年刚刚毕业,对于我们这应届生到底应该学习那些技术呢? 面对着现在技术横生,到底哪项是适合自己的呢?自己一直都在迷茫,若有那位大神再次经过,望给出您宝贵的建议. 最 ...

  4. webpack1.x 升级到 webpack2.x 英文文档翻译

    近日项目要升级到webpack2.2,原来使用的webpack版本是1.12,在升级项目的同时,翻译一下官方的升级文档,去掉了一些不常用的配置 resolve.root, resolve.fallba ...

  5. ASP.NET连接数据库配置文件

    // Web.Config <?xml version="1.0" encoding="utf-8"?> <!-- 有关如何配置 ASP.NE ...

  6. [DB] - Mysql创建定时任务

    mysql支持定时任务的创建,要求mysql服务器开始定时任务调度. 1. 查看是否开启定时任务执行 SHOW VARIABLES LIKE 'event_scheduler'; // OFF表示没有 ...

  7. AOP的简单练习

    ---恢复内容开始--- 1.AOP的主要作用及概念简介 AOP最大的用处在于事务处理上,业务层在项目中主要负责以下的操作: ·调用数据层进行处理: ·进行事务的处理: ·关闭数据库的连接操作: 但在 ...

  8. c#导入excel 绑定数据 repeat为例子

    先读取Excel文件并存到dataset public DataSet ExcelToDataTable(string filename, string strsheetname) { try { / ...

  9. 康复计划#5 Matrix-Tree定理(生成树计数)的另类证明和简单拓展

    本篇口胡写给我自己这样的什么都乱证一通的口胡选手 以及那些刚学Matrix-Tree,大致理解了常见的证明但还想看看有什么简单拓展的人- 大概讲一下我自己对Matrix-Tree定理的一些理解.常见版 ...

  10. 四十年前的 6502 CPU 指令翻译成 JS 代码会是怎样

    去年折腾的一个东西,之前 blog 里也写过,不过那时边琢磨边写,所以比较杂乱,现在简单完整地讲解一下. 前言 当时看到一本虚拟机相关的书,正好又在想 JS 混淆相关的事,无意中冒出个问题:能不能把某 ...