顾名思义,数组去重就是把数组中重复的值都去掉,只保留不重复的值。
【 经典面试题 】
假设有数组 array = [1,5,2,3,4,2,3,1,3,4]
写一个函数 unique,使得 unique(array) 的值为 [1,5,2,3,4]
去重方式很多,这里用三种方法实现去重
方法一:new Set() 方法
Set对象是值的集合,你可以按照插入的顺序迭代它的元素。Set 中的元素只会出现一次,即 Set 中的元素是唯一的。
两种方式:
Array.from(new Set(array))Array.from()方法:将一个类似数组对象或可遍历对象变成一个真的数组。
[...new Set(array)]
如下:
var array = [1,5,2,3,4,2,3,1,3,4];
unique = () => {
return Array.from(new Set(array));
};
console.log(unique(array));
或者
var array = [1,5,2,3,4,2,3,1,3,4];
unique = () => {
return [...new Set(array)];
};
console.log(unique(array));
new Set() 方法是新语法,旧浏览器可能不支持
方法二:Map 方法
map() 方法创建一个新数组,这个新数组由原数组中的每个元素都调用一次提供的函数后的返回值组成。
var array= [1,5,2,3,4,2,3,1,3,4];
function unique(){
let map = new Map();
let result = [];
for (let i = 0; i < array.length; i++) {
if(!map.has(array[i])) { // 如果 map 中没有该 key ,就加进 result
map.set(array[i], true);
result.push(array[i]);
}
}
return result;
};
console.log(unique());
Map 方法是新语法,旧浏览器可能不支持
方法三:数组的 indexOf 方法
indexOf()方法:返回调用它的String对象中第一次出现的指定值的索引,从fromIndex处进行搜索。如果未找到该值,则返回 -1。
var array = [1,5,2,3,4,2,3,1,3,4];
function unique(){
var newArray = [];
for(let i=0; i<array.length; i++){
if(newArray.indexOf(array[i]) === -1){
newArray.push(array[i]);
}
}
return newArray;
}
console.log(unique(array));
缺点:无法对NaN去重