先说一下 == 和 === 区别
=== 严格相等,会比较两个值的类型和值== 抽象相等,比较时,会先进行类型转换,然后再比较值
一、利用for嵌套for,然后splice去重(ES5中最常用)
用双重for循环把前一个和所有后面的元素进行比较,如果相等则删除 缺点:如果数组长度很大,效率会很低
这个方法需要注意要j–
否则如果数组里面有三个及以上连续相等的元素的时候,就会出现问题。例如:var arr = [1,1,1,2,3,4,‘a’,‘b’,‘a’,false,false];答案就会为1,1,2,3,4,a,b,false。
这里是因为当数组删除一个元素的时候,数组长度减1,后面点元素就会往前移动一位,索引也减1,但是j还是进行了j++的操作。
// function unique(arr){
// 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--; // splice 会改变数组长度,所以要将下标 j 减一
// //也可以两步结合写成 arr.splice(j--,1);先比较(运算)再减
// }
// }
// }
// return arr;
// }
二、利用indexOf去重
* 新建一新数组,遍历传入数组,值不在新数组就push进该新数组中
IE8以下不支持数组的indexOf方法
// function unique(arr){
// if(!Array.isArray(arr)){
// console.log('type error!')
// return
// }
// var newArr = [];//创建一个新的空数组,用来存放去重后的新数组.
// for(var i = 0; i < arr.length;i++){//利用for循环循环遍历需要去重的数组
// if(newArr.indexOf(arr[i]) === -1){//利用indexOf()方法查询遍历出的数组在新数组中是否出现,如果出现:则继续遍历数组,如未出现:则利用push方法添加到新数组中 注意此处的括号不要搞错位置了呀呀
// newArr.push(arr[i]);
// }
// }
// return newArr;
// }
三、利用sort()加一行遍历冒泡(相邻元素去重)
这种方法首先调用了数组的排序方法,sort() ,然后根据排序后的结果进行遍历及相邻元素进行比对,如果相等则跳过改元素,直到遍历结束。
// function unique(arr){
// if(!Array.isArray(arr)){
// console.log('type error!')
// return
// }
// arr = arr.sort();
// var newArr= [];
// for(var i = 0; i < arr.length;i++){
// if(arr[i] != arr[i-1]){
// newArr.push(arr[i])
// }
// }
// return newArr;
// }
四、利用原型方法来过滤数组中的重复元素。
// Array.prototype.unique = function(){
// var temp=[]; //定义一个临时数组
// for(var i = 0; i < this.length; i++){ //循环遍历当前数组
// //判断当前数组下标为i的元素是否已经保存到临时数组
// //如果已保存,则跳过,否则将此元素保存到临时数组中
// if(temp.indexOf(this[i]) == -1){
// temp.push(this[i]);
// }
// }
// return temp;
// };
五、对象属性名唯一特性的方法:
Array.prototype.unique = function(){
if (Array.isArray(arr)) {
var temp = [];
var temNum = {};
for (var i = 0; i < arr.length; i++) {
if(!temNum[arr[i]]) {
temp.push(arr[i]);
}
temNum[arr[i]] = true;
}
return temp;
}
return;
}
var arr = [1,1,1,2,3,4,‘a’,‘b’,‘a’,false,false,‘true’,true];//1,2,3,4,a,b,false,true
//console.log(unique(arr));
//console.log(arr.unique());
以后再补充 有不对的欢迎指正