1.双重循环去重,增加了额外的空间
function singelItem(array){
var newArr=[];
if(array.length===0){
return;
}
for(var i=0;i<array.length;i++){
if(i===0){//先添加进一个item
newArr.push(array[i]);
}
//以后的每次都要作比较
for(var j=0;j<newArr.length;j++){
if(array[i]===newArr[j]){
break;
}else{
if(j===newArr.length-1&&newArr[j]!=array[i]){
newArr.push(array[i]);
}
}
}
}
return newArr;
}
2.双重循环去重
//从第一个不重复的值开始添加进数组。
Array.prototype.distinct = function(){
var arr = this,
result = [],
i,
j,
len = arr.length;
for(i = 0; i < len; i++){
for(j = i + 1; j < len; j++){
if(arr[i] === arr[j]){//每次循环若当前值重复,则将i加1
j = ++i;//利用++的副作用改变了i的值;
}
}
result.push(arr[i]);
}
return result;
}
var arra = [1,2,3,4,4,1,1,2,1,1,1];
arra.distinct(); //返回[3,4,2,1]
3.hash去重
Array.prototype.distinct = function (){
var arr = this,
i,
obj = {},
result = [],
len = arr.length;
for(i = 0; i< arr.length; i++){
if(!obj[arr[i]]){ //如果能查找到,证明数组元素重复了也可以写成!obj.hasOwnProperty(arr[i])
obj[arr[i]] = 1;
result.push(arr[i]);
}
}
return result;
};
var a = [1,2,3,4,5,6,5,3,2,4,56,4,1,2,1,1,1,1,1,1,];
var b = a.distinct();
console.log(b.toString()); //1,2,3,4,5,6,56
这里注意一点儿知识:
访问对象的属性有两种方法:点或者中括号去获取。
两者的区别:
1、中括号法可以用变量作为属性名,而点方法不可以;
2、中括号法可以用数字作为属性名,而点语法不可以;
3、中括号法可以使用js的关键字和保留字作为属性名,而点语法不可以
所以访问对象中已经存在的属性可以使用点方法来访问,而设置对象的属性时最好使用方括号的方法去设置属性。特别是当属性名是一个变量的时候