<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<script>
var arr = [20,55,66,80,99,20,66];//[20,55,66,80,99]
//1.排序法
// //1.1 声明空数组存储去重后的数组
// var newArr = [];
// //1.2 对arr排序
// arr.sort(function(a,b){
// return a-b;
// });
// //1.3 遍历arr,检查arr[i]与arr[i+1]是否相等。如果不等说明没有重复添加到newArr
// for(var i = 0;i<arr.length;i++){
// if(arr[i] != arr[i+1]){
// newArr.push(arr[i]);
// };
// };
// console.log(newArr);
//2.开关法(假设成立法)
//2.1 声明空数组存储去重后的数组
var newArr = [];
//2.2 遍历arr检查arr[i]在不在newArr中
for(var i = 0;i<arr.length;i++){
//开关法
//(1)假设arr[i]可以添加到newArr (不在)
var isOk = true;
//(2)遍历newArr,让arr[i]与每一个newArr元素比较。 只要有元素相等,开关变成false
for(var j = 0;j<newArr.length;j++){
if(arr[i] == newArr[j]){
isOk = false;
break;//一旦重复就没有必要检查
};
};
//(3)根据开关的值实现需求
if(isOk){
newArr.push(arr[i]);
};
};
console.log(newArr);
//3.indexOf()
//2.1 声明空数组存储去重后的数组
var newArr = [];
//2.2 遍历arr检查arr[i]在不在newArr中
for(var i = 0;i<arr.length;i++){
//indexOf() : 检查arr[i]在不在newArr中
if(newArr.indexOf(arr[i]) == -1){
newArr.push(arr[i]);
}
};
console.log(newArr);
//4.对象法 (核心原理:利用对象属性名不能重复)
/* 对象取值与赋值特点
取值
属性名存在:获取属性值
不存在:获取undefined
赋值
属性名存在: 修改属性值
属性名不存在:则动态添加
*/
var newArr = [];//声明空数组存储去重的数组
var obj = {};//记录元素是否重复
for(var i = 0;i<arr.length;i++){
//判断obj有没有一个属性名叫做 arr[i]
if(obj[ arr[i] ] == undefined){// arr[i]没有重复
newArr.push(arr[i]);
obj[ arr[i] ] = 1;//给obj添加一个 arr[i] 属性,表示已经出现过了
}else{//如果不是第一次出现,就自增。记录出现次数
obj[ arr[i] ]++;
};
};
console.log(newArr);
</script>
</body>
</html>
/*
1.ES6新增数据类型: Set
集合,类似于ES5中的数组。 和数组唯一的区别,Set没有重复元素
2.应用场景 : 数组去重
*/
// //1.基本使用
// var arr = [10,20,55,66,25,20,100,80,66];
// var set = new Set(arr);
// console.log(set);//{ 10, 20, 55, 66, 25, 100, 80 }
// //去重
// var arr1 = [...set];
// console.log(arr1);
//2.经典场景 : 一行代码实现数组去重
var arr = [10,50,60,88,10,50,25];
// //(1)使用set去重
// var set = new Set(arr);
// console.log(set);
// //(2)使用拓展运算符将set转成数组
// var arr1 = [...set];
// console.log(arr1);
var arr1 = [...new Set(arr)];
console.log(arr1);
// let res = (function(n){ return n==1?1:arguments.callee(n-1)})(5);
// console.log(res);//120