javascript数组去重的三种常用方法,及其性能比较
在进行数组操作时往往会遇到去掉重复项的问题,下面简单介绍下数组去重的方法,以及其执行效率
方法一
采用两次循环
原理:拿当前的和他后面的比,如果后面的有重复的就干掉
但是我们发现数组最后一项,后面没有东西,那他就不用和后边的比较了,所以我们只要循环arr.length-1次就可以了
var arr=[1,3,5,3,5,3,4,1,3,5,3,5,3,41,3,5,3,5,3,4,1,3,5,3,5,3,4];
for(var i=0;i<arr.length-1;i++){
var curItem=arr[i];//当前项
for(var j=i+1;j<arr.length;j++){
if(curItem==arr[j]){
arr.splice(j,1);
j--;
}
}
}
console.log(arr);
此方法运用了了两次循环,给浏览器带来很大压力,次数为数组长度的阶乘。
所以考虑用对象替代(对象的属性名字不会重复)方法二
var arr=[1,3,5,3,5,3,4,6,2,2,2,1];
var len=arr.length;
var obj={}; for(var i=0;i<len;i++){
var cur=arr[i];//当前项
obj[cur]=cur;
}
var list=[];
for(key in obj){
list.push(obj[key])
}
console.log(list);
此方法执行效率较高,但循环使用两次
采用另一种方法:方法三
原理: 循环数组,把数组中的每一项当做obj对象的属性名和属性值存进来,
但是我们发现如果obj对象中已经存在了这个属性名的话,那就说明数组重复了,那我们删除重复的项
var arr=[1,3,5,3,5,3,4,1,3,5,3,5,3,41,3,5,3,5,3,4,1,3,5,3,5,3,4];
var obj={};
for(var i=0;i<arr.length;i++){
var cur=arr[i];//当前项
if(obj[cur]==cur){
arr.splice(i,1);
i--
}else{
obj[cur]=cur;
}
}
obj=null;
console.log(arr);
此方法也运用两次循环,仔细想想还有运用一次实现去重的方法。
对方法二封装成方法
var arr=[1,3,5,3,5,3,4,6,2,2,2,1,7,84,34,634];
Array.prototype.arr_unique=function (){
var len=this.length;
var obj={}; for(var i=0;i<len;i++){
var cur=this[i];//当前项
obj[cur]=cur;
}
var list=[];
for(key in obj){
list.push(obj[key])
} return list; }; console.log(arr.arr_unique());
对方法三封装成方法
var arr=[1,3,5,3,5,3,4,6,2,2,2,1,7,84,34,634];
Array.prototype.arr_unique=function (){
var obj={};
for(var i=0;i<this.length;i++){
var cur=arr[i];//当前项 if(obj[cur]==cur){
alert(1111);
arr.splice(i,1);
i--
}else{
obj[cur]=cur;
}
}
obj=null;
return this;
};
console.log(arr.arr_unique());
javascript数组去重的三种常用方法,及其性能比较的更多相关文章
- JavaScript数组去重的几种方法
这个老问题,网上普遍都有了,为什么要再写一遍呢,主要是为了记个笔记... 遍历时搜索结果数组 思路很明确,如下 新建一个数组存放结果 循环遍历原数组,对于每一个元素,在结果数组中搜索是否存在 若不存在 ...
- JavaScript数组去重的6个方法
方法一无需思考,我们可以得到 O(n^2) 复杂度的解法.定义一个变量数组 res 保存结果,遍历需要去重的数组,如果该元素已经存在在 res 中了,则说明是重复的元素,如果没有,则放入 res 中. ...
- js数组去重的三种常用方法总结
第一种是比较常规的方法 思路: 1.构建一个新的数组存放结果 2.for循环中每次从原数组中取出一个元素,用这个元素循环与结果数组对比 3.若结果数组中没有该元素,则存到结果数组中 Array.p ...
- JavaScript数组去重的10种方法
「数组去重」的确是个老生常谈的问题了,但是你真正的掌握了吗?平时开发中是不是用最简单粗暴的方法来去重?注意到它的性能问题了吗?当面试官对你回答的四个去重方法都不满意时你可以想出更简单且性能能更好的方法 ...
- JavaScript数组去重的四种方法
今天,洗澡的想一个有趣的问题,使用js给数组去重,我想了四种方法,虽然今天的任务没有完成,5555: 不多说,po代码: //方法一:简单循环去重 Array.prototype.unique1 ...
- [转] JavaScript数组去重(12种方法)
数组去重,一般都是在面试的时候才会碰到,一般是要求手写数组去重方法的代码.如果是被提问到,数组去重的方法有哪些?你能答出其中的10种,面试官很有可能对你刮目相看.在真实的项目中碰到的数组去重,一般都是 ...
- javascript数组去重的4个方法
Array.prototype.unique1 = function(){//有局限性,1,“1”的情况会被去重,因为存入临时对象时,数组中的值被统一转换成了字符串 var obj = {},newA ...
- javascript数组去重的4个方法(转)
原文地址:http://blog.csdn.net/chengxuyuan20100425/article/details/8497277 面试前端必须准备的一个问题:怎样去掉Javascript的A ...
- javascript数组去重的两个方法
方法一: 创建一个临时数组,判断目标数组中每个元素是否在临时数组中,如果不在就添加进临时数组,最后return临时数组 <script> var arr=[1,2,3,4,5,1,2,3, ...
随机推荐
- Share Point 创建 TimerJob
public class SyncMetadataJob:SPJobDefinition { private const string JobName = @"Metadata Sync J ...
- 使用Ef时,对一个或多个实体的验证失败。有关详细信息,请参见“EntityValidationErrors”属性。
EntityValidationErrors 关于如何查看 EntityValidationErrors 详细信息的解决方法 我们在 EF 的编程中,有时候会遇到这样一个错误: 但是,按照他的提示 ...
- HTML5鼠标hover的时候图片放大的效果展示
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- 查询oracle RAC实例名称等信息
select * from gv$instance;
- AndroidStudio 应用(一)
1.下载安装,用上vpn了都: 2.配置模拟器,出现问题:VT-x is disabled in the BIOS for both all CPU modes (VERR_VMX_MSR_ALL_V ...
- UI-UIImageView和Image的区别
1.UIImageView图片视图控件 继承于UIView 用于显示图片在应用程序中 2.UIImage 是将真实图片文件转化为程序中的图片,然后3.UIImageView是Image的载体,负责显示 ...
- sqlserver 2005列转行
isnull(stuff((select ',' + d.comname from projemp a left outer join emps c on a.empid = c.empidleft ...
- 读书笔记:Ross:概率模型导论:方差和协方差
例2.34 考虑N个人,一些人赞同某个提议,另一些人反对.假定Np个人赞同,N-Np人反对,p未知.现在想要通过随机选取n个人调查他们的态度,并由此来估计总体中赞同这个提议的人员比例p. 设Xi=1表 ...
- TX Textcontrol 使用总结三——禁用右键、模版合并
一.Tx Textcontrol如何禁用右键快捷菜单? ==> 添加txContent_TextContextMenuOpening事件,实现方式如下所示: private void txCon ...
- 解密 Uber 数据团队的基础数据架构优化之路
如果你用过Uber,你一定会注意到它的操作是如此的简单.你一键叫车,随后车就来找你了,最后自动完成支付,整个过程行云流水.但是,在这简单的流程背后其实是用Hadoop和Spark这样复杂的基础大数据架 ...