这是我参与8月更文挑战的第8天,活动详情查看: 8月更文挑战
js实现数组的去重,给定某无序数组,要求去除数组中的重复数字并且返回新的无重复数组。
数组去重,一般都是在面试的时候才会碰到,一般是要求手写数组去重方法的代码。如果是被提问到,数组去重的方法有哪些? 在真实的项目中碰到的数组去重,一般都是后台去处理,很少让前端处理数组去重。虽然日常项目用到的概率比较低,但还是需要了解一下,以防面试的时候可能回被问到。
1.使用Set集合
利用set集合数据不重复的特性我们直接通过这种数据结构实现数组去重这种效果。
const array = [1, 2, 3, 5, 1, 5, 9, 1, 2, 8];
let set=new Set(array)
console.log(Array.from(set))//将set转为from(浅拷贝)
2.使用map存储不重复的数组/利用对象属性
遍历时,将我们的值存入map的key中,判断当前数组中是否可以添加成功key,如果可以,过,如果不可以,跳出本次循环
const array = [1, 2, 3, 5, 1, 5, 9, 1, 2, 8];
let length = array.length
let map = new Map;
for (let i = 0; i < length; i++) {
if (map.has(array[i])) {
continue
} else {
map.set(array[i], array[i])
}
}
console.log(Array.from(map.keys()))
3.利用sort+一次遍历
我们先是同sort对数组进行排序,然后再将子问题化为比较我们前后元素是否相等,如果相等过,如果不等将当前元素添加至新数组
const array = [1, 2, 3, 5, 1, 5, 9, 1, 2, 8];
array.sort();
let newaray = [array[0]]
for (let i = 1; i < array.length; i++) {
if (array[i] !== array[i - 1]) {
newaray.push(i)
}
}
console.log(newaray)
4. 使用indexOf/includes
定义一个新数组,新数组用来存放我们当前去重后的结果,然后使用indexOf判断新数组内是否包含我们当前遍历的数。
const array = [1, 2, 3, 5, 1, 5, 9, 1, 2, 8];
let length = array.length
let newarr = []
for (let i = 0; i < length; i++) {
if (newarr.indexOf(array[i]) === -1) {
newarr.push(array[i])
}
}
console.log(newarr)
5.暴力双重循环,再使用splice删除元素
for(var i=0; i<arr.length; i++){
for(var j=i+1; j<arr.length; j++){
if(arr[i]==arr[j]){ //第一个等同于第二个,splice方法删除第二个
arr.splice(j,1);
j--;
}
}
}