数组去重在很多面试中都会被问到,这里简单说一下数组去重的几种方式。
有个朋友上次面试就被问到了,当时面试官给的题目是一句话数组去重(这里应该考的是es6 set去重,最简单的去重方法)
1、es6 set去重
ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。(可以用于去重)
Set本身是一个构造函数,用来生成 Set 数据结构。
let arrayA = [1,1,2,2,3,3,'a','a','T','y','k','r','r'];
console.log([...new Set(arrayA)])
2、简单去重
创建一个空数组用来存放筛选后的元素 筛选的方法是通过比较遍历到当前元素是否在于新数组中 若不存在则push 存在则进行下一次循环
const a = ['aaa','c43',5867,'wda','pps','c43','aaa','pps'];
arraydr = (array) => {
let temp = [];
console.log(array);
for (let i of array) {
if (temp.indexOf(i) === -1) {
temp.push(i);
}
}
console.log(temp);
}
arraydr(a);
3、相邻去重
首先利用sort进行排序 然后去比较相邻位的元素 若为true则 push 反之进行下一次循环比较
const a = ['aaa','c43',5867,'wda','pps','c43','aaa','pps'];
arraydr2 = (array) => {
let temp = [];
array.sort();
console.log(array);
for (let i in array) {
if (i === 0&&array[i] !== array[i+1]) {
temp.push(array[i]);
} else if (array[i] !== array[i-1]&&array[i] !== array[i+1]) {
temp.push(array[i]);
} else if (i === array.length - 1&&array[i] !== array[i-1]) {
temp.push(array[i]);
}
}
console.log(temp);
}
arraydr2(a);
4、数组下标法
该方法是利用indexOf求出元素在数组中首次出现的位置跟下标进行对比
const a = ['aaa','c43',5867,'wda','pps','c43','aaa','pps'];
arraydr3 = (array) => {
let temp = [];
for (let i = 0;i < array.length;i++){
if (array.indexOf(array[i]) == i) {
temp.push(array[i]);
}
}
console.log(temp);
}
arraydr3(a);
如果你还有更多的方法可以在下面留言哦。多多指教。