Array数组去重
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数组去重的更多相关文章
- array 数组去重 过滤空值等方法
去重操作 第一种方式, ES 6 引入的新书据结构 Set 本身就是没有重复数据的, 可以使用这个数据结构来转化数组.时间复杂度 O(n) 123456 const target = [];const ...
- javascript数组去重 String字符串去掉两端空格 javascript Array二分法排序 比较 javascript 求和
通过原形添加方法: ==================数组去重(对象去重法)======================= Array.prototype.unique=function(){ va ...
- [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 ...
- JavaScript常见的五种数组去重的方式
▓▓▓▓▓▓ 大致介绍 JavaScript的数组去重问题在许多面试中都会遇到,现在做个总结 先来建立一个数组 var arr = [1,2,3,3,2,'我','我',34,'我的',NaN,NaN ...
- js 查找树节点 数组去重
//查找树节点function findData(curOrg, id) { var array = []; if ((typeof curOrg == 'object') && (c ...
- &&&&数组去重方法总结&&&&&
[数组去重]本文一共总结了5种方法: //方法一:sort方法 var ary = [1, 4, 2, 3, 1, 2, 2, 3, 3, 2, 5, 2, 1, 2];Array.prototype ...
- 关于数组去重的几种方法-------javascript描述
第一种方法:借助json对象来实现,若json对象中无该属性则添加,否则不添加,最后返回json对象的属性,时间复杂度为O(n) function deleteArrayRepeat(arr) { v ...
- JavaScript数组去重的几种方法
这个老问题,网上普遍都有了,为什么要再写一遍呢,主要是为了记个笔记... 遍历时搜索结果数组 思路很明确,如下 新建一个数组存放结果 循环遍历原数组,对于每一个元素,在结果数组中搜索是否存在 若不存在 ...
- 【译】更快的方式实现PHP数组去重
原文:Faster Alternative to PHP’s Array Unique Function 概述 使用PHP的array_unique()函数允许你传递一个数组,然后移除重复的值,返回一 ...
随机推荐
- springmvc拦截器的配置、使用
springmvc拦截器的配置.使用:1.自定义拦截器,实现HandlerInterceptor接口. package com.bybo.aca.web.interceptor; import jav ...
- altium designer应用技巧---cyclone IV代芯片底部焊盘问题
首先对于 altera 公司的FPGA芯片来讲,在cyclone III代以上,芯片的底部增加了一 个焊盘,很多工程师往往以为是散热用,其实不然,底部焊盘需要接地(altera手册上面 明确规定,Th ...
- 关于ARM中的tst、cmp、bne、beq指令
一.关于cmp的详细用法 假设现在AX寄存器中的数是0002H,BX寄存器中的数是0003H. 执行的指令是:CMP AX, BX 执行这条指令时,先做用AX中的数减去BX中的数的减法运算. 列出二进 ...
- python中的高阶函数
高阶函数英文叫Higher-order function.什么是高阶函数?我们以实际代码为例子,一步一步深入概念. 变量可以指向函数 以Python内置的求绝对值的函数abs()为例,调用该函数用以下 ...
- static、extern分析
1.extern extern在变量声明中有这样一个作用:你要在demo2.cpp中引用demo1.cpp中的一个全局变量,就要在demo2.h中用extern来声明这个全局变量(或者在demo1.h ...
- 控件activeX开发之项目ffmpeg解码h264——总结
1. 编译好ffmpeg的lib库和dll库 2. 播放器作为一个dilog类player,然后在ctrol中的oncreate重写方法中用全局属性cplayer *player里new cplaye ...
- 测试x264编码器的低延时编码和非延时编码
最近在学x264的编码,经过大量的测试,编码1080P的视频,编码10000帧数据. 在设置为低延时编码的时候: 编码线程0,一帧耗时:7.000000 ms.编码线程0,一帧耗时:8.000000 ...
- linux -- ubuntu修改IP地址、网关、dns
ubuntu系统 一.使用命令设置Ubuntu IP地址 1.修改配置文件blacklist.conf禁用IPV6 sudo vi /etc/modprobe.d/blacklist.conf 表示用 ...
- ImportError: No module named Crypto.Cipher
from Crypto.Cipher import AES 报错: ImportError: No module named Crypto.Cipher 解决方法: pip install pycry ...
- Solr with Apache Tomcat
配置教程 1 http://www.duntuk.com/how-install-apache-solr-46-apache-tomcat-7-use-drupal https://www.gotos ...