javascript数字数组去重复项的实现代码


Posted in Javascript onDecember 30, 2010

test.htm

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> 
<title>array-remove-repeate</title> 
<style> 
.tt{ background-color:#006699; height:3px; overflow:hidden;} 
</style> </head> 
<body> 
<div class="tt"></div> 
<div class="result" id="result"></div> 
<script> 
if(!console) 
{ 
var console={}; 
console.log=function(str){alert(str);} 
} 
Array.prototype.unique1 = function () { 
var r = new Array(); 
label:for(var i = 0, n = this.length; i < n; i++) { 
for(var x = 0, y = r.length; x < y; x++) { 
if(r[x] == this[i]) { 
continue label; 
} 
} 
r[r.length] = this[i]; 
} 
return r; 
} 
Array.prototype.unique2 = function () { 
return this.sort().join(",,").replace(/(,|^)([^,]+)(,,\2)+(,|$)/g,"$1$2$4").replace(/,,+/g,",").replace(/,$/,"").split(","); 
} 
Array.prototype.unique3 = function() { 
var temp = {}, len = this.length; 
for(var i=0; i < len; i++) { 
var tmp = this[i]; 
if(!temp.hasOwnProperty(tmp)) { 
temp[this[i]] = "my god"; 
} 
} 
len = 0; 
var tempArr=[]; 
for(var i in temp) { 
tempArr[len++] = i; 
} 
return tempArr; 
} 
Array.prototype.unique4 = function () { 
var temp = new Array(); 
this.sort(); 
for(i = 0; i < this.length; i++) { 
if( this[i] == this[i+1]) { 
continue; 
} 
temp[temp.length]=this[i]; 
} 
return temp; 
} 

var test=(function() 
{ 
var arr2=[]; 
for(var i=0;i<2000;i++) 
{ 
var t=i; 
t=parseInt(Math.random()*2000)+1; 
arr2[i]=(t.toString()); 

} 
//arr2=["zhoujian","zhou","zhou"]; 
return function(){ 
return arr2; 
//return [1,2,3,3]; 
}; 

})(); 
window.onload=function(){ 

// 
Watch.start("Cost times1:"); 
var arr= test(); 
console.log(arr.length ); 
arr=arr.unique1(); 
console.log(arr.length); 
Watch.stop(); 
// 
Watch.start("Cost times2:"); 
arr= test(); 
console.log(arr.length); 

arr=arr.unique2(); 
console.log(arr.length); 
Watch.stop(); 
// 
Watch.start("Cost times3:"); 
arr= test(); 
console.log(arr.length ); 
arr=arr.unique3();//数组很大时,最快 
console.log(arr.length ); 
Watch.stop(); 
// 
Watch.start("Cost times4:"); 
arr= test(); 
console.log(arr.length); 
arr=arr.unique4(); 
console.log(arr.length); 
Watch.stop(); 
Watch.report(); 
} 
</script> 
</body> 
</html>

Watch.js
var Watch = { 
result: [], 
guid: -1, 
totalTime: 0, 
start: function(title){ 
this.result[++this.guid] = [title || this.guid, new Date().getTime()]; 
}, 
stop: function(){ 
var r = this.result[this.guid]; 
var t = new Date().getTime() - r[1]; 
this.totalTime += t; 
r[1] = t; 
if(t>=10000){ 
alert("This code takes too long to run,you should optimizate them."); 
} 
}, 
report: function(parent){ 
var div = document.createElement("div"); 
div.style.fontSize = "12px"; 
var str = []; 
str.push("<p><b>The total times:</b><span style='color:#f00'>" + this.totalTime + "</span> ms.</p>"); 
for (var i = 0, l = this.result.length; i < l; i++) { 
if (this.result[i].length > 1) { 
str.push("<p>" + "<span style='width:200px;display:inline-block;background-color:#f7f7f7;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;'>"+"<span style='background-color:#0c0; -moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;width=" + (this.totalTime === 0 ? this.totalTime : parseInt(200 * this.result[i][1] / this.totalTime)) + "px; display:inline-block;'>"+this.result[i][1]+"</span>"+"</span> <span style='width:150px; display:inline-block;'>" + this.result[i][0] + "</span>" + "</p>"); 
}else{ 
str.push(this.result[i][0]); 
} 
} 
div.innerHTML = str.join(""); 
parent = parent || document.body; 
parent.appendChild(div); 
div = null; this.totalTime = 0; 
this.guid = -1; 
this.result=[]; 
}, 
fns: function(){ 
var a = arguments; 
for (var i = 0, l = a.length; i < l; i++) { 
this.start(a[i][0]); 
a[i][1](); 
this.stop(); 
} 
}, 
execByTimes: function(fn, times, title){ 
this.start(title); 
while (times--) { 
fn(); 
} 
this.stop(); 
}, 
print: function(str){ 
this.result[++this.guid]=[str]; 
} 
}
Javascript 相关文章推荐
javascript smipleChart 简单图标类
Jan 12 Javascript
javascript设计模式之工厂模式示例讲解
Mar 04 Javascript
剖析Node.js异步编程中的回调与代码设计模式
Feb 16 Javascript
AngularJS入门(用ng-repeat指令实现循环输出
May 05 Javascript
jQuery Dialog对话框事件用法实例分析
May 10 Javascript
详解Javascript中prototype属性(推荐)
Sep 03 Javascript
深入理解vue $refs的基本用法
Jul 13 Javascript
JavaScript 值类型和引用类型的初次研究(推荐)
Jul 19 Javascript
Vue 2.0学习笔记之使用$refs访问Vue中的DOM
Dec 19 Javascript
js限制input只能输入有效的数字(第一个不能是小数点)
Sep 28 Javascript
jquery实现聊天机器人
Feb 08 jQuery
nuxt 每个页面head标签内容设置方式
Nov 05 Javascript
ExtJs的Date格式字符代码
Dec 30 #Javascript
jcarousellite.js 基于Jquery的图片无缝滚动插件
Dec 30 #Javascript
使用jQuery全局事件ajaxStart为特定请求实现提示效果的代码
Dec 30 #Javascript
在VS2008中使用jQuery智能感应的方法
Dec 30 #Javascript
jQuery在vs2008及js文件中的无智能提示的解决方法
Dec 30 #Javascript
js TextArea的选中区域处理
Dec 28 #Javascript
基于jquery的一行代码轻松实现拖动效果
Dec 28 #Javascript
You might like
PHP实现批量删除(封装)
2017/04/28 PHP
解决form中action属性后面?传递参数 获取不到的问题
2017/07/21 PHP
PHP工厂模式、单例模式与注册树模式实例详解
2019/06/03 PHP
js字符串转换成xml对象并使用技巧解读
2013/04/18 Javascript
javascript简单事件处理和with用法介绍
2013/09/16 Javascript
JQuery中extend的用法实例分析
2015/02/08 Javascript
jQuery Ajax中的事件详细介绍
2015/04/16 Javascript
由ReactJS的Hello world说开来
2015/07/02 Javascript
详解js界面跳转与值传递
2016/11/22 Javascript
Javascript 高性能之递归,迭代,查表法详解及实例
2017/01/08 Javascript
jQuery插件echarts实现的单折线图效果示例【附demo源码下载】
2017/03/04 Javascript
Angular2 之 路由与导航详细介绍
2017/05/26 Javascript
Vue2.0利用vue-resource上传文件到七牛的实例代码
2017/07/28 Javascript
Node.js学习之TCP/IP数据通讯(实例讲解)
2017/10/11 Javascript
让mocha支持ES6模块的方法实现
2020/01/14 Javascript
为Python程序添加图形化界面的教程
2015/04/29 Python
selenium + python 获取table数据的示例讲解
2018/10/13 Python
对Python的zip函数妙用,旋转矩阵详解
2018/12/13 Python
Python图像处理之图片文字识别功能(OCR)
2019/07/30 Python
浅谈django2.0 ForeignKey参数的变化
2019/08/06 Python
对tensorflow 中tile函数的使用详解
2020/02/07 Python
Django框架请求生命周期实现原理
2020/11/13 Python
Django中如何用xlwt生成表格的方法步骤
2021/01/31 Python
个人找工作求职简历的自我评价
2013/10/20 职场文书
夜不归宿检讨书
2014/02/25 职场文书
酒店管理毕业生自荐信
2014/05/25 职场文书
幼儿园家长安全责任书
2014/07/22 职场文书
快递员岗位职责
2014/09/12 职场文书
副总经理岗位职责范本
2014/09/30 职场文书
2014年前台文员工作总结
2014/12/08 职场文书
多表查询、事务、DCL
2021/04/05 MySQL
pandas提升计算效率的一些方法汇总
2021/05/30 Python
Springboot配置suffix指定mvc视图的后缀方法
2021/07/03 Java/Android
python中__slots__节约内存的具体做法
2021/07/04 Python
详解在OpenCV中如何使用图像像素
2022/03/03 Python
MySQL多表查询机制
2022/03/17 MySQL