方法一
<script type="text/javascript">
// 创建一个数组
// var arr = [1,2,3,2,1,3,4,2,5];
var arr = [1,1,2,2,2,3,3,4,5,6,6,7];
// 去除数组中重复的数字
// 获取数组中的每一个元素
for(var i=0; i<arr.length; i++) {
console.log(arr[i])
// 获取当前元素后面的所有元素 当前元素的下一个元素
for(var j=i+1; j<arr.length; j++) {
// console.log("---------"+arr[j])
// 判断arr[i]与arr[j]中各元素的值是否相等
if(arr[i] == arr[j]) {
// 如果相等,则证明出现了重复的元素,则删除j对应的元素,而不是i中的
arr.splice(j,1) //删除j中重复的元素
// 当删除了当前j所在位置的元素,后边的元素会自动补位,且补位的新元素将不会被重新比较
// 我们需要再比较一次j所在位置的元素
// 使j自减
j--;
}
}
}
console.log(arr);
</script>
方法二
function unique(arr) {
//定义常量 res,值为一个Map对象实例
const res = new Map();
//返回arr数组过滤后的结果,结果为一个数组
//过滤条件是,如果res中没有某个键,就设置这个键的值为1
return arr.filter((a) => !res.has(a) && res.set(a, 1))
}
方法三
function unique(arr) {
//通过Set对象,对数组去重,结果又返回一个Set对象
//通过from方法,将Set对象转为数组
return Array.from(new Set(arr))
补充:
Array.from() 用于将两类对象转为真正的数组。
1.类似数组的对象(array-like)
2.可遍历的对象(iterable)
let arrayLike = {
'0': 'a',
'1': 'b',
'2': 'c',
length: 3
};
// ES6的写法
let arr2 = Array.from(arrayLike); // ['a', 'b', 'c']