时光几米
2016-05-13 15:10
如何把一个数组的重复元素去掉
常规思路:循环和 hash
循环的方法:思路就是:把数组元素搬运到另一数组,搬运过程中检查 元素是否重复,如有,丢弃,没有,加入。
方法一:虽然是循环,但是效率还可以。思路是 把一个数组搬运到另一新数组,比较 要搬运的数组元素 与 新数组元素的最后一个,看是否相同。
Array.prototype.delRepeat1=function(){ //先排序,因为这个方法只是对比 两个元素,n的最后一个元素 与 this[i] this.sort(); var n=[this[0]]; for(var i=1;i<this.length;i++){ //注意JS是若类型语言,避免 123 与 "123" 判断为相等,所以此处用 !== if(this[i]!== n[n.length -1]) { //这一句 用 n[n.length]不行的,原因,我也不知道,希望以后探讨!!! n.push(this[i]); } } return n; }
方法二:还是循环,这个效率低,因为indexOf()会从头检查数组元素,效率不行
具体思路差不多,复制数组时 进行比较,检查新数组中是否存在 要插入的那个数组元素
Array.prototype.delRepeat2=function(){ //一个新的临时数组 var n=[]; for(var i=0;i<this.length;i++){ // -1 表示n中没有此元素,则把this[i]加入n中 if(n.indexOf(this[i])==-1) n.push(this[i]); } return n; }
方法三:用indexOf()的另一种方法
Array.prototype.delRepeat3=function(){ var n=this[0]; //对原有数组判断,如果第一次出现的位置与序列号相同,则没有重复,否则有重复 for(var i=1;i<this.length;i++){ if(this.indexOf(this[i])==i) { n.push(this[i]); } } return n; }
方法四 hash 这个方法看起来会高级一点
Array.prototype.delRepeate4 = function(){ //n为hash表,r为临时数组 var n={},r=[]; for(var i=0;i<this.length;i++){ //如果hash表中没有当前项 if(!n[this[i]]){ //存入hash表中 n[this[i]] =true; //把当前数组的当前项push到临时数组中 r.push(this[i]); } } return r; }
for(var i=0; i<arr.length; i++){
for(var j=i+1; j<arr.length; j++){
if(arr[i]==arr[j]){
arr.splice(j,1);
j--;
}
}
}
var arr = ["1","2", "3","4","5","2","3","8","9","10","11"]
var.length;
var num=[];
for(var i=0; i<lang; i++){
for(var j=i+1; j<lang; j++){
if(arr[i]==arr[j]){
num.push(j)
}
}
}
for(var i=num.length-1; i>=0; i--){
arr.splice(num[i],1)
}
感觉应该还有更简便的方法.- -。我是新手-只能写到这..
JavaScript进阶篇
468060 学习 · 21891 问题
相似问题