1.循环方法

function methodOne(arr){
var result = [],
arrLen = arr.length,
item = null,
i,j;
for(var i = 0; i < arrLen; i++){ //循环数组长度
item = arr[i]; //当前项
var resultLen = result.length; //新建数组长度
for(var j = 0; j < resultLen; j++){ //循环新数组
if(item === result[j]){ //如果当前item等新数组中的其中一个就跳过;
break; //停止循环
}
}
if(j === resultLen){ //如果长度相等就添加当前项
result.push(item);
}
}
return result;
}

2.数组的indexOf()方法,需要做IE兼容

function methodTwo(arr){
var result = [];
var arrLen = arr.length;
var item,i;
for(var i = 0; i < arrLen; i++){
item = arr[i];
if(result.indexOf(item) === -1){ //如果不存在就添加
result.push(item);
}
}
return result;
}
//添加数组IndexOf方法
if (!Array.prototype.indexOf){
Array.prototype.indexOf = function(elt /*, from*/){
var len = this.length >>> 0;
var from = Number(arguments[1]) || 0;
from = (from < 0) ? Math.ceil(from) : Math.floor(from);
if (from < 0){
from += len;
} for (; from < len; from++){
if (from in this && this[from] === elt){
return from;
}
}
return -1;
};
}

3.ES5方法的forEach()方法

function methodThree(arr){
var result = [];
//三个参数:数组元素,元素的索引,数组本身
arr.forEach(function(item,index,array){
//从前面开始查找数组中的元素,如果有重复的,查找的索引与元素索引不相等
if(array.indexOf(item) === index){
result.push(item);
}
})
return result;
}

4.判断类型(能去除个对象组成的数组)

function methodFive(arr){
var result = [];
var hash = [];
var len = arr.length;
for(var i = 0; i < len; i++){
var item = arr[i];
var key;
key = typeof(item) + item; //判断类型+值
if(typeof(item) === "object"){ //多个对象时
for(var j in item){ //循环键值对
key = item[j]; //判断类型+值
}
}
if(hash[key] !== 1){ //如果没有此类型+值,则添加,并将hash[key]赋值为1,如果有重复,下次就有值了
result.push(item);
hash[key] = 1;
}
}
return result;
}

5.对象的重写覆盖特性(最快的)

Array.prototype.unique = function(){
var obj = {},
len = this.length,
result = [],
i;
for(i = 0; i < len; i++){
var item = this[i];
obj[item] = item; //obj[this[i]]得属性值,如有相同值就会覆盖重写了
}
for(i in obj){
result.push(obj[i]);
}
return result;
}

另一种函数定义方法(以上同理)

function eliminateDuplicates(arr){
var i,
len = arr.length,
result = [],
obj = {};
for(var i = 0; i < len; i++){
obj[arr[i]] = 0;
}
for(i in obj){
result.push(i);
}
return result;
}

测试

var arr1 = [5,7,3,1,7,5,6];
var arr2 = [8,9,5,9,8,3,"3",1];
var arr3 = ["q","b","a","o","q","a"];
var arr4 = ["a","b","c","a","a"];
var arr5 = [{name:"xiaoma"},1,"a",{id:"xl"}];
var arr6 = [{name:"xiaoma"},{name:"xiaoma"}];
var arr7 = [{name:"xiaoma",id:5},{name:"xiaoma2",id:6},{name:"xiaoma3",id:5}];
var arr8 = [true,false,false,true];
var arr9 = [/[\d]/,/[\w]/];
var arr10 = [/[\d]/,/[\d]/];

Array数组去重的更多相关文章

  1. array 数组去重 过滤空值等方法

    去重操作 第一种方式, ES 6 引入的新书据结构 Set 本身就是没有重复数据的, 可以使用这个数据结构来转化数组.时间复杂度 O(n) 123456 const target = [];const ...

  2. javascript数组去重 String字符串去掉两端空格 javascript Array二分法排序 比较 javascript 求和

    通过原形添加方法: ==================数组去重(对象去重法)======================= Array.prototype.unique=function(){ va ...

  3. [leetcode]80. Remove Duplicates from Sorted Array II有序数组去重(单个元素可出现两次)

    Given a sorted array nums, remove the duplicates in-place such that duplicates appeared at most twic ...

  4. JavaScript常见的五种数组去重的方式

    ▓▓▓▓▓▓ 大致介绍 JavaScript的数组去重问题在许多面试中都会遇到,现在做个总结 先来建立一个数组 var arr = [1,2,3,3,2,'我','我',34,'我的',NaN,NaN ...

  5. js 查找树节点 数组去重

    //查找树节点function findData(curOrg, id) { var array = []; if ((typeof curOrg == 'object') && (c ...

  6. &&&&数组去重方法总结&&&&&

    [数组去重]本文一共总结了5种方法: //方法一:sort方法 var ary = [1, 4, 2, 3, 1, 2, 2, 3, 3, 2, 5, 2, 1, 2];Array.prototype ...

  7. 关于数组去重的几种方法-------javascript描述

    第一种方法:借助json对象来实现,若json对象中无该属性则添加,否则不添加,最后返回json对象的属性,时间复杂度为O(n) function deleteArrayRepeat(arr) { v ...

  8. JavaScript数组去重的几种方法

    这个老问题,网上普遍都有了,为什么要再写一遍呢,主要是为了记个笔记... 遍历时搜索结果数组 思路很明确,如下 新建一个数组存放结果 循环遍历原数组,对于每一个元素,在结果数组中搜索是否存在 若不存在 ...

  9. 【译】更快的方式实现PHP数组去重

    原文:Faster Alternative to PHP’s Array Unique Function 概述 使用PHP的array_unique()函数允许你传递一个数组,然后移除重复的值,返回一 ...

随机推荐

  1. Hibernate- QBC离线查询

    package com.gordon.test; import java.util.List; import org.hibernate.Criteria; import org.hibernate. ...

  2. python中的argsort函数

    >>> import numpy >>> help(numpy.argsort) Help on function argsort in module numpy. ...

  3. 【转】【Asp.Net】ASP.Net Response.ContentType 详细列表

    不同的ContentType 会影响客户端所看到的效果.默认的ContentType为 text/html 也就是网页格式. 代码如: <% response.ContentType =&quo ...

  4. Can't connect to MySQL server on '192.168.7.175' (10060)

    原因: 1.你的ip没有被授权,无法访问. 2.端口没有打开(如:3306端口没有打开). 解决方法: 授权(http://www.cnblogs.com/SZxiaochun/p/6401424.h ...

  5. 【转载】WebApi 接口测试工具:WebApiTestClient

    正文 前言:这两天在整WebApi的服务,由于调用方是Android客户端,Android开发人员也不懂C#语法,API里面的接口也不能直接给他们看,没办法,只有整个详细一点的文档呗.由于接口个数有点 ...

  6. js学习之--Bootstrap Modals(模态框)

    http://www.runoob.com/bootstrap/bootstrap-v2-modal-plugin.html http://outofmemory.cn/bootstrap/tutor ...

  7. PHP简单的图片上传

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

  8. 制作一款3D炸弹超人游戏

    说起炸弹超人,相信很多朋友都玩过类似的游戏,其中最为人熟知的莫过于<泡泡堂>.该类型游戏需要玩家在地图中一边跑动一边放置炸弹,同时还要躲避敌方炸弹保护自己.最初的炸弹超人游戏都是2D的,今 ...

  9. VS2010属性表的建立与灵活运用

    问题引入:在VS2010当中,进行opencv.QT等的编程时,总是需要配置很多属性还有依赖项等,为了减少每次都重复配置属性的工作量,现在可以运行属性表这个东西来简化配置.opencv也可以这样建立使 ...

  10. shell脚本中,将所有的参数值否赋给一个变量或者说将所有的参数合成一个字符串,获取所有参数

    需求描述: 在写脚本的过程中,遇到这样的一个需求,将脚本执行过程中,传递给 脚本的所有的参数,都赋值给一个变量然后在对这个变量进行处理. 测试过程: 通过以下的脚本将所有传递给脚本的变量都赋值一个变量 ...