今天发现以前写的数组去重方法有问题,删了 新的,这个应该没问题吧
var arr4 = [2, 5, 1, 1, 1, 1, 1, 5, 2, 1];
var arr = {
unique: function (arr) {
var res = [];
for (var i in arr) {
if (!res.length || this.compare(arr[i], res)) {
res.push(arr[i]);
}
}
return res;
},
compare: function (k, arr) {
for (var i in arr) {
if (arr[i] == k) {
return false;
}
}
return true;
}
}
console.log(arr.unique(arr4));
var dedupArr = function (a) {
var newArr = [];
for (var i = 0, len = a.length; i < len; i++) {
for (var j = i + 1; j < len; j++) {
if (a[i] == a[j]) {
j = ++i;
}
}
newArr.push(a[i])
}
return newArr;
}
var arr = [1, 1, 1, 12, 2, 2, 5, 5, 5, 6, 6, 1, 2]
alert(dedupArr(arr))
也可以这样
function unique(arr){
//和第一种类似
var res=[];
for(var i=0,len=arr.length;i<len;i++){
if(res.indexOf(arr[i])<0){
res.push(arr[i])
}
}
return res;
}
这种对于类型不一样去重不了,如1和“1”,并且ES5数组才有indexOf()方法
unique([1,1,1,1,"1",22,2,2,2,5,5,6,])
[1, "1", 22, 2, 5, 6]
我们可以新增一个变量来判断,新的数组里面是否有某个值
function unique(arr){
var tempobj ={},res=[];
for(var i=0,len=arr.length;i<len;i++){
if(!tempobj[arr[i]]){
tempobj[arr[i]]=true;
res.push(arr[i]);
}
}
return res;
}
unique([1,1,1,1,"1",22,2,2,2,5,5,6,])
[1, 22, 2, 5, 6]
平常写代码觉得能少用一个变量就少用一个,对于第三种多了一个变量的确一下子简单不少。