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. HBase shell 命令。

    HBase shell 命令. 进入hbase shell console$HBASE_HOME/bin/hbase shell如果有kerberos认证,需要事先使用相应的keytab进行一下认证( ...

  2. Ajax-ajax实例1-动态加载的 FAQ

    动态加载 FAQ 的过程主要是利用 XMLHttpRequest(以下简称 XHR)对象与服务端通信,根据用户单击的感兴趣问题动态将内容加载到页面中.在具体实现时,有两点要注意的内容. 1 .对每个问 ...

  3. cs108 04 oop design

    oop design 分为以下几个方面: - encapsulation and modularity(封装和模块化) - API/Client interface design(API 接口给调用类 ...

  4. 移动H5功能设计反思 测试用例总结

    一.线上页面滑动流畅性测试 1.减少长动画效果(影响流畅) 2.是否自动跳转或者还是让用户自己操作跳转需要推敲 二.buttom和页面滑动的选择(优劣) 部分手机本身就会滑动不灵敏,大部分时候其实用b ...

  5. HTTP/1.1 学习

    发现对于HTTP协议不能脱口而出,故而怒翻资料,RFC2616 . 在其abstract中是这么说HTTP的,应用层协议,generic.无状态.其特点之一是 the typing and negot ...

  6. BMP是在Bean中完成对数据库JDBC的各种调用

    BMP是在Bean中完成对数据库JDBC的各种调用 CMP是由EJB容器自动完成对数据库的操作 会话Bean主要处理业务逻辑

  7. javascript -- 判断是否为某个数据类型

    为何不用其他方法,因为下面的写法考虑了各种兼容性.判断是否为数组isArray = function (source) {    return '[object Array]' == Object.p ...

  8. 配置OpenGL的开发环境

    OpenGL库资源下载 http://pan.baidu.com/s/1ntVsReL 环境搭建 将下载好的文件进行解压,可以得到后缀为.h..lib..dll三类文件,对这三类文件作如下处理: 将所 ...

  9. iOS7入门开发全系列教程新地址

    包括了系列1所有.系列2所有,系列3部分(进行中) 由于大家都知道的原因,换了github保存: https://github.com/eseedo/kidscoding 假设下载有问题能够留言,请在 ...

  10. logging.xml file setfile(null,true) call failed

    定义目录三个方法:一:${catalina.base}或${catalina.home}相对路径配置方法.catalina.home是你配置服务器时自动在环境变量中加的路径,默认是指向tomcat服务 ...