今天在掘金上看到有一道面试题,我感觉很有意思就准备自己写一下,不管写的怎么样;先看看自己是否能写出来嘛?然后带着这个心态开始了写大厂面试题;哈哈哈
以下是这个作者整理的一些面试题,大家如果需要的话可以看看
【1 月最新】前端 100 问:能搞懂 80% 的请把简历给我
问题
已知如下数组: var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10]; 编写一个程序将数组扁平化去并除其中重复部分数据,最终得到一个升序且不重复的数组
分析
拿到一个问题,我们先分析一下这个问题需要用什么样的逻辑去写,然后再根据自己理出来的逻辑一步一步去实现他即可!!!
- 题目第一步就说了需要扁平化数据,那这就没得说的了;先扁平化数组(这儿大家可能会想到内置api-flat,既然叫我们挑战,那我们就不使用内置api了,就手动写一个)
- 去重
- 排序
这个问题大致就这三步即可完成,那么我们就一步一步的去做吧!
数组扁平化
这儿比较简单;我利用了reduce函数去判断是否是一个数组,如果是就递归,反之合并数组数据,即可
代码:
var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10];
// 扁平化
const flat = (arr) =>{
return arr.reduce((one,pro)=>{return one.concat(Array.isArray(pro) ? flat(pro) : pro)},[])
};
const flatSize = flat(arr);
结果:
[
1, 2, 2, 3, 4, 5, 5,
6, 7, 8, 9, 11, 12, 12,
13, 14, 10
]
去重
去重的时候我也是利用的reduce方法,然后将重复的数字替换掉,最后在返回数据的时候用过滤器filter将替换的那些给过滤掉即可
代码:
const deWeight = (arr) =>{
const weight = arr.reduce((one,pro)=>{return one.concat(one.some(oi=>oi == pro) ? 'pro' : pro)},[]);
return weight.filter(o=>o !== 'pro');
};
const deWeightSize = deWeight(flatSize);
结果:
[
1, 2, 3, 4, 5, 6,
7, 8, 9, 11, 12, 13,
14, 10
]
排序
排序我用的是选择排序的方式,这个没什么说的,我相信大家都有所了解,看哈代码就知道怎么做的了!!!
代码:
// 选择排序
const sort = (arr) =>{
for(let i = 0; i < arr.length - 1; i++) {
let indexMin = i;
for(let j = i + 1; j < arr.length; j++) {
if(arr[i] > arr[j]){
indexMin = j;
}
}
if(indexMin !== i) {
let tp = arr[i];
arr[i] = arr[indexMin];
arr[indexMin] = tp;
}
};
return arr;
};
结果:
[
1, 2, 3, 4, 5, 6,
7, 8, 9, 10, 11, 12,
13, 14
]
完整代码
var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10];
// 扁平化
const flat = (arr) =>{
return arr.reduce((one,pro)=>{return one.concat(Array.isArray(pro) ? flat(pro) : pro)},[])
};
const flatSize = flat(arr);
// 去重
const deWeight = (arr) =>{
const weight = arr.reduce((one,pro)=>{return one.concat(one.some(oi=>oi == pro) ? 'pro' : pro)},[]);
return weight.filter(o=>o !== 'pro');
};
const deWeightSize = deWeight(flatSize);
// 选择排序
const sort = (arr) =>{
for(let i = 0; i < arr.length - 1; i++) {
let indexMin = i;
for(let j = i + 1; j < arr.length; j++) {
if(arr[i] > arr[j]){
indexMin = j;
}
}
if(indexMin !== i) {
let tp = arr[i];
arr[i] = arr[indexMin];
arr[indexMin] = tp;
}
};
return arr;
};
console.log(sort(deWeightSize));
我写的这个可能有很多不足的地方,也是临时起意;望大家理解哈!!!
如果你们有更好的方法,也可以贴出来分享一哈,相互学习进步