> 本专栏主要记录与分享笔者在面试中或者准备面试中认为比较重要的面试点,如果觉得有用的话请为我一建三连qwq 😋
方案如下
像是扁平化数组这种经典的面试问题,我们不仅要会, 还得会的漂亮,我们在给面试官写实现方法的时候,最好告诉哪个是你认为最好的
方案1 - > flat() 😋
// !将多维数组转换为一维数组
const arr = [1, [2, [3, [4, 5]]], 6];// => [1, 2, 3, 4, 5, 6
// 方案1,使用flat(),该方法是数组的方法括号中给一个深度,
//如果给infinity就是不管多维都给你变成一维数组
let res1=arr.flat(Infinity);
console.log(res1); //* [ 1, 2, 3, 4, 5, 6 ] 简单好用最优解
没错,只需要一行,win!这里就是我认为的最优解了
来点拓展😋
在面对一些复杂点的场景下,flat跟配合其他方法会有一个绝妙的配合
例如: 我们想要对一个多维数组进行扁平化并且要去重然后升序排列
// * 2.对于flat,我们还可以配合set,sort做更复杂的情况,例如:
const arrT=[ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10];
// * 我们想要对中国数组进行扁平化加去重加排序
let resT=Array.from(new Set(arrT.flat(Infinity))).sort((a,b)=>a-b);
// &其中array.from把一个set对象变成数组,而set里面的值是不能重复的,所以可以拿来去重,
// & 我们通过flat把数组扁平化后把值给到了set
console.log(resT);//[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,13, 14]
方案二 - > 使用正则😋
const arr = [1, [2, [3, [4, 5]]], 6];// => [1, 2, 3, 4, 5, 6
let res2=JSON.parse(`[`+ JSON.stringify(arr).replace(/\[|\]/g,'')+`]`)
// * 正则是对字符串的操作,所以我们先用JSON.stringify(arr)得到对应字符串,再用replace将里面的【】字符串替换为空,
//* 随后我们在给JSON.stringify+replace替换好的字符串加上一个【】,通过JSON.parse将其转化为一个对象数组
console.log('2',res2);//[ 1, 2, 3, 4, 5, 6 ]
注:这里其实还有一种低配版本,就是使用split(','),但是他最后得到的不是数组,笔者认为给出的解答要严谨才好
方案三 使用函数递归😋
// &思路,把多维数组中的每个数都遍历出来,然后给一个一维数组装起来,
// *当isArray判断到你数组中的一项也是个数组时,就执行递归,如果不是数组就push进去
const res3=[];
const fn=(arr)=>{
for(let i=0;i<arr.length;i++){
if (Array.isArray(arr[i])) {
fn(arr[i]);
}else{
res3.push(arr[i]);
}
}
}
fn(arr);
console.log('3',res3); //[ 1, 2, 3, 4, 5, 6 ]
结尾😘
感谢你的观看,笔者只是个大二学生,现在也还在为找实习而烦恼,如果有错误或者有什么需要改进的地方希望有大佬指出qwq