前端面试题之数组去重
2019-10-29 本文已影响0人
汶沐
// 可以在函数刚开始时,添加个鉴别参数是否为数组
if (!Array.isArray(arr)) {
console.log('type error!')
return
}
1、Es6 Set
function unique (arr) {
return Array.from(new Set(arr))
// Array.from()方法就是将一个类数组对象或者可遍历对象转换成一个真正的数组
}
代码最少,但缺点是无法去掉{}空对象。
2、for嵌套for,再splice
function unique(arr) {
for(var i=0;i<arr.length;i++){
for(var j=i+1;j<arr.length;j++){
if(arr[i] == arr[j]) {
arr.splice(j,1);
j--;
}
}
}
return arr;
}
3、indexOf
function unique(arr) {
var array = [];
for(var i=0;i<arr.length;i++) {
if(array.indexOf(arr[i]) === -1){
array.push(arr[i])
}
}
return array;
}
4、sort()
function unique(arr) {
arr = arr.sort() //对数组进行排序
var array = [arr[0]];
for (var i=1;i<arr.length;i++) {
if (arr[i] !== arr[i-1]) { //与相邻元素对比
array.push(arr[i]);
}
}
return array;
}
5、includes
function unique(arr) {
var array = [];
for(var i=0;i<arr.length;i++) {
if(!array.includes(arr[i])) { //includes 检验数组是否含有某个值
array.push(arr[i]);
}
}
return array
}
6.[…new Set(arr)]
[…new Set(arr)] // []和...都不能省去,相当于简化了第一种方法
谢谢