本专栏主要记录与分享笔者在面试中或者准备面试中认为比较重要的面试点,如果觉得有用的话请为我一建三连qwq 😋
应用场景
数组去重不仅是面试官常问的经典问题,并且在我们做项目中也会经常使用
例如:
我们想要对接口传过来的后台参数进行一些过滤,我们想要拿到不重复的id,可以在接受或者使用时通过数组去重的方法,对重复id的进行过滤
解决方案
如下,对arr数组
const arr = [1, 1, '1', 17, true, true, false, false, 'true', 'a', {}, {}];
// => [1, '1', 17, true, false, 'true', 'a', {}, {}]
Set
// 方案1 Set
// . Set是一个类似数组的方法,里面不允许有重复数字,可以帮助我们去重
const res1 = Array.from(new Set(arr));
console.log("Set方法", res1);
// [1, '1', 17, true, false, 'true', 'a', {}, {}]
// end
上面的Array.from是es6的新方法,可以帮我们转化出数组,而Set对象不允许自己有重复的值,所以当我们把需要过滤的数组给他的时候,可以帮我们去重。
indexOf
// 方案2 indexOf
// . 思路,indexof可以检索某个值有没有在你的数组里面,如果没有就返回-1(是我们要的),
// . 如果有会返回对应的序号(证明已经有了,我们不需要)
const unique = (arr) => {
let res = [];
for (let i = 0; i < arr.length; i++) {
if(res.indexOf(arr[i]) ===-1) res.push(arr[i]);
}
console.log('indexof',unique(arr));
// => [1, '1', 17, true, false, 'true', 'a', {}, {}]
return res;
}
// end
include,思路同上
// 方案3 include,思路同上,但是有注意点
const unique2=arr=>{
let res=[];
for (let index = 0; index < arr.length; index++) {
if(!res.includes(arr[index])) res.push(arr[index]);
}
console.log('includes',res);
// => [1, '1', 17, true, false, 'true', 'a', {}, {}]
return res;
}
unique2(arr);
// end
include可以帮你检测有没有某个值,他返回给你一个布尔值
filter
// 方案4 filter 思路同上
// . 注意1:filter可以返回一个新数组,并且不会对空数组进行遍历
// .注意2:filter可以给两个参数,第一个是方法函数必选,第二个可选thisvalue,函数中又可以给三个参数
// .注意3:currentValue, index,arr;第一个必选,其他可选。第一个就是他在遍历数组中每一项代表的值,index是索引
const unique3=arr=>{
return arr.filter((item,index)=>{
return arr.indexOf(item)===index;
})
}
console.log('filter',unique3(arr));
注意1:filter可以返回一个新数组,并且不会对空数组进行遍历
注意2:filter可以给两个参数,第一个是方法函数必选,第二个可选thisvalue,函数中又可以给三个参数(currentValue, index,arr)
注意3:currentValue, index,arr;第一个必选,其他可选。功能就跟他名字是一样的,很好记
Map
// .map有has方法可以判断有没有某个值,也有set方法可以插入某个值,我们通过这个概念可以实现去重
const unique4 = arr => {
const map = new Map();
const res = [];
for (let i = 0; i < arr.length; i++) {
if (!map.has(arr[i])) {
map.set(arr[i], true)
res.push(arr[i]);
}
}
return res;
}
console.log('MAP',unique4(arr));
END
感谢你的观看,笔者只是个大二学生,现在也还在为找实习而烦恼,如果有错误或者有什么需要改进的地方希望有大佬指出qwq