- 导读
- 数组去重是非常常见的题目,今天来试一下不同的方法实现数组去重。
一、使用for循环
- 利用循环遍历数组,查询数组中每一个值是否存在于新数组中,如果不存在就将这个值push进新数组,最后返回这个新数组即可。
let array = [1, 5, 2, 3, 4, 2, 3, 1, 3, 4];
function unique(value) {
const arrayCopy = value;
let arrayNew = []; // 准备一个空数组
for (let i = 0; i < arrayCopy.length; i++) {
if (arrayNew.indexOf(arrayCopy[i]) === -1) {
// indexOf查询数组中是否存在指定值,不存在则返回1
arrayNew.push(arrayCopy[i]);
} else {
continue;
}
}
return console.log(arrayNew);
}
unique(array);
- 缺点:循环比较冗余,如果数据量大执行效率差
二、利用Set对象
- Set 中的值总是唯一的
MDN定义:
Set对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用。
let array = [1, 5, 2, 3, 4, 2, 3, 1, 3, 4];
function unique(value) {
const arrayCopy = value;
let newSet = new Set(arrayCopy); // 定义一个set对象,他的值是数组arrayCopy
const arrayNew = Array.from(newSet); // 将set对象转化为数组
return console.log(arrayNew);
}
unique(array);
- 缺点:涉及到了类型转换,特定情况下并不稳定
三、利用Array.map()
- 由于map函数本身的特性,数组中的每一项都会去执行函数,所以我觉得它更像是第一种方法的简化版
let array = [1, 5, 2, 3, 4, 2, 3, 1, 3, 4];
function unique(value) {
let arrayCopy = value;
let arrayNew = [];
arrayCopy.map((i) => {
if (arrayNew.indexOf(i) === -1) {
arrayNew.push(i);
}
})
return console.log(arrayNew);
}
unique(array);
- 原理和for循环类似,可能会出现执行效率的问题