JavaScript-数组去重的4种方式
方式一 : 排序法去重 (最好理解,性能最低)
<script>
var arr = [20,50,60,80,20,50,88];
//1.对arr排序
arr.sort(function(a,b){
return a-b;
});
console.log(arr);
//2.声明空数组存储去重后的数组
var newArr = [];
//3.遍历arr, 检查arr[i] 与 arr[i+1]是否一致
for(var i = 0;i<arr.length;i++){
if(arr[i] != arr[i+1]){
//添加到newArr
newArr.push(arr[i]);
};
};
console.log(newArr);
</script>
方式二 : 开关法去重 (不好理解,提现编程思想)
<script>
var arr = [20,50,60,80,20,50,88];
//1.声明空数组存储去重后的数组
var newArr = [];
//2.遍历arr,检查arr[i] 在不在newArr中
for(var i = 0;i<arr.length;i++){
//3.开关法:检测arr[i]在不在newArr中
//(1)假设不在 : true:可以添加 false:不可以添加
var res = true;
//(2)遍历newArr检查
for(var j = 0;j<newArr.length;j++){
if( arr[i] == newArr[j]){//在,不能添加
res = false;
break;
};
};
//(3)通过res值来判断是否添加
if(res){
newArr.push(arr[i]);
};
};
console.log(newArr);
</script>
方式三 : indexOf去重 (好理解,性能好,实际开发常用)
<script>
var arr = [20,50,60,80,20,50,88];
//1.声明空数组存储去重后的数组
var newArr = [];
//2.遍历arr,检查arr[i]在不在newArr中
for(var i = 0;i<arr.length;i++){
//3. newArr.indexOf() : 检查元素在不在newArr中
if( newArr.indexOf(arr[i]) == -1 ){//不在
newArr.push(arr[i]);
};
};
console.log(newArr);
</script>
方式四 : 对象法去重 (最不好理解,提现所有的js语法精髓。最喜欢看别人用这种方式)
<script>
var arr = [20, 50, 60, 80, 20, 50, 88];// [20,50,60,80,88]
/*
对象法去重核心思路 : 对象的属性名不能重复
将数组的元素作为对象的属性名 { "20" : 1 }
*/
var obj = {};//检测是否有重复元素
var newArr = [];//存储去重后的数组
for (var i = 0; i < arr.length; i++) {
//将数组元素作为对象属性名
if (obj[arr[i]] == undefined) {//没有重复
newArr.push(arr[i]);
obj[arr[i]] = 1;//下一次再出现重复元素,不会是undefined
};
};
console.log(newArr);
</script>