如何把一个数组的重复元素去掉
常规思路:循环和 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)
}
感觉应该还有更简便的方法.- -。我是新手-只能写到这..