第一个和第二个,都是对新数组或新json进行操作,而第三个是对原数组本身进行indexOf。
第一个是用新数组的indexOf来判断是否有重复元素,而第二个是通过nHash[item]来判断是否存在。
  var array = [1, 2, 3, 2, 1];
Array.prototype.unique1 = function () {
var nArray = []; // 新建一个数组
console.log(this, 'this的值');
for (var i = 0, len = this.length; i < len; i++) { //遍历当前数组
var item = this[i];
//如果当前数组的第i没有保存在临时数组中,那么将当前项push到临时数组里面
if ( nArray.indexOf(item) == -1 ) { // 数组通过通过indexOf()来判断这个item是否存在这个新数组中
nArray.push(item);
};
};
return nArray; // 返回这个新数组
}
console.log(array, array.unique1());
var array2 = [1, 2, 3, 2, 1];
Array.prototype.unique2 = function() {
var nArray = [], nHash = {}; // n为hash表,r为临时数组
for (var i = 0, len = this.length; i < len; i++) {
var item = this[i];
console.log(nHash[item]); // undefined 3, true 2
if (!nHash[item]) { // 如果hash表中没有当前项 对象通过nHash[item]即value为undefined || true来判断是否存在。
nHash[item] = true; // 存入hash表
nArray.push(item); //把当前数组的当前项push到临时数组里面
};
};
return nArray;
};
console.log(array2.unique2()); var array3 = [1, 2, 3, 2, 1];
Array.prototype.unique3 = function() {
var nArray = [];
nArray.push(this[0]);
for (var i = 1, len = this.length; i < len; i++) { // 从一开始减少一次循环,从第二项开始遍历
var item = this[i];
if (this.indexOf(item) == i) { // 对原数组自身进行操作
//如果当前数组的第i项在当前数组中第一次出现的位置不是i,
//那么表示第i项是重复的,忽略掉。否则存入结果数组
nArray.push(item);
};
};
return nArray;
};
console.log(array3.unique3());

js数组操作-数组去重的更多相关文章

  1. JS数组操作:去重,交集,并集,差集

    原文:JS数组操作:去重,交集,并集,差集 1. 数组去重 方法一: function unique(arr) { //定义常量 res,值为一个Map对象实例 const res = new Map ...

  2. JS中操作数组、字符串的速度比较

    对相同轻量级的数组和字符串进行检索:   const arr = [1, 2, 3, 4, 5, 6, 7, 8, 'q'] const string = '12345678q' const Q = ...

  3. js中操作数组的一些方法

    增 push   在数组的末尾添加一个或多个元素,并返回新的长度.  array.push(1,2,3.........) unshift  在数组的开头添加一个或多个元素,并返回新的长度. arra ...

  4. js中操作数组的一些方法【转】

    增 push   在数组的末尾添加一个或多个元素,并返回新的长度.  array.push(1,2,3.........) unshift  在数组的开头添加一个或多个元素,并返回新的长度. arra ...

  5. 关于js中操作数组的一些方法

    网上找的通篇看了一遍讲的很透收藏了!  转自(https://www.cnblogs.com/blogs-8888/p/6518683.html) 1.锁定数组的长度(让数组的长度变成只读). 1 2 ...

  6. 第三章 JQuery: HelloWorld--常见方法--css--选择器--筛选器--属性--效果--事件--数组操作--字符串操作--对象转换

    1.jQuery简介 为了简化JavaScript 的开发, 一些JavsScript 库诞生了. JavaScript库封装了很多预定义的对象和实用函数.能帮助使用者建立有高难度交互的页面, 并且兼 ...

  7. 05-02 Java 一维数组、内存分配、数组操作

    数组的定义 动态初始化 /* 数组:存储同一种数据类型的多个元素的容器. 定义格式: A:数据类型[] 数组名; B:数据类型 数组名[]; 举例: A:int[] a; 定义一个int类型的数组a变 ...

  8. js之数组操作

    js之数组操作 前言 本文主要从应用来讲数组api的一些操作,如一行代码扁平化n维数组.数组去重.求数组最大值.数组求和.排序.对象和数组的转化等.(文章摘自:https://segmentfault ...

  9. js数组和数组去重的几种简单的方法

    http://blog.csdn.net/liangklfang/article/details/49300417 1.证明一个对象是数组的方法. 方法(1) [].constructor === A ...

随机推荐

  1. DevExpress 学习使用之 LookUpEdit

    我的机器上,Winform 控件中的 LookUp 有1+3 种,在我们国家也被称为 4 种,你们那儿呢? 这 1+3 种 LookUpEdit 分别是 LookUpEdit.GridLookUpEd ...

  2. javascript闭包1

    javascript闭包 在学习javascript闭包之前,需要先了解一下"作用域链". 每一段javascript代码都有一个与之关联的作用域链(scope chain),这个 ...

  3. 自定义生命周期的设计(iOS篇)

    自定义生命周期的设计(iOS篇) 首先要确定一点,我们的App,要基于XIB文件进行编程,而不是在每个相应的ViewController里面去手动创建页面的每个控件.这样做的好处是,将页面布局与业务逻 ...

  4. web.xml加载过程

    web.xml加载过程:1 启动WEB项目的时候,容器(如:Tomcat)会读他的配置文件web.xml读两个节点  <listener></listener>和<con ...

  5. HashMap源码剖析

    HashMap源码剖析 无论是在平时的练习还是项目当中,HashMap用的是非常的广,真可谓无处不在.平时用的时候只知道HashMap是用来存储键值对的,却不知道它的底层是如何实现的. 一.HashM ...

  6. C#山寨版本拨号客户端

    C#山寨版本[天翼拨号客户端]---内含详细抓包,模拟数据---万事俱备,只欠东风.   本帖子本来最初是发在CSDN上的,回复的也有十几个,但没有一个有技术含量的回复....特来此讨论,请教,请各位 ...

  7. Lazy<T>

    Lazy<T> 对象的创建方式,始终代表了软件工业的生产力方向,代表了先进软件技术发展的方向,也代表了广大程序开发者的集体智慧.以new的方式创建,通过工厂方法,利用IoC容器,都以不同的 ...

  8. Excel 开发概述

    浅谈Excel开发:一 Excel 开发概述 做Office相关的开发工作快一年多了,在这一年多里,在插件的开发中遇到了各种各样的问题和困难,还好同事们都很厉害,在和他们的交流讨论中学到了很多的知识. ...

  9. 多线程计算----pthread

    #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <pthread.h& ...

  10. phper談談最近重構代碼的感受(2)

    重构代码更多的是对程序的可读性和可扩展性上做一些优化. 首先我对可读性进行细化.借鉴大神川山甲的重构系列文http://www.cnblogs.com/baochuan/archive/2012/03 ...