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()函数允许你传递一个数组,然后移除重复的值,返回一 ...
随机推荐
- MDL---Material Design Lite框架推荐
INTRO material design相比不会陌生, 现在的移动端基本遵循了这个设计规范, 微软退出过一个残次品universal design(花了半个月时间赶出来的规范)也是借鉴了MD的思想, ...
- OC基础--常用类的初步介绍与简单使用之NSDate
一.创建一个时间 NSDate *date = [NSDate date]; // 打印出的时间是0时区的时间(北京--东八区) NSLog(@"%@",date); 二.日期格式 ...
- Springboot 之 Hibernate自动建表(Mysql)
Springboot 之 Hibernate自动建表(Mysql) 2016年10月21日 10:39:44 阅读数:8180 本文章来自[知识林] 引入Maven依赖包 <dependency ...
- [Eclipse] 项目编码
一.修改eclipse的新建项目的编码 在菜单栏的 Window->Preferences->General->Workspace->Text file encoding 将其 ...
- Qt中Pro文件变量详细说明
学习Qt时,发现有些知识看了不经常用就忘了,以下是书本上写的一些关于qmake的相关知识,自己看后,打算把一些经常用到的记下来,整理整理. Qt程序一般使用Qt提供的qmake工具来编译. qmake ...
- Qt 反射
简介 本文主要讲解Qt是如何实现反射,以及一点点反射使用的小心得. 文章概览 Qt反射内幕小窥 详细内容 反射前期准备 得到注册的类成员变量 得到注册的类成员函数 访问类成员属性(get,set) 调 ...
- VMWare 回收磁盘空间
两部分内容: 1) 实际操作体验下在vmware player里回收guest vm的磁盘空间,还给host: 2)顺便把之前的笔记翻出来关于vmware unmap/reclaim, 对照总结. 1 ...
- VC dimension(Vapnik-Chervonenkis dimension)
二维平面的线性分类器的VC维讨论:http://www.tuicool.com/articles/JjaMfe VC维介绍:http://blog.csdn.net/lucylove3943/arti ...
- c++ 用构造函数
1.c++ 用构造函数创建一个对象时,对象里的属性应该是全新的不存在把之前的属性留下的问题.之所以debug里会存在上一个变量的信息,应该是debug里的一个bug,与程序无光.
- 解决 openpyxl 垂直分页符和水平分页符同时添加的问题
前言 十天前知乎上有人提问 python:openpyxl模块怎么给表格添加分页符?实现分页打印功能?,看到问题之后,我很快的给他了一个如何添加垂直分页符或水平分页符的示例,你以为问题就结束了?我是这 ...