5.6 字节飞书云表格前端
- 自我介绍不充分,脑海中只能蹦出“技术栈关键词“,没有重要的信息可以供面试官参考。
- 算法题只知其一不知其二,没能覆盖到最边缘情况和最优解。
- 写算法题时,看我比较艰难,想提示下问了 Promise.resovel啥时候执行的问题,结果我没get到:(
算法题:
[1,[2,[3,[4,5]]]]数组拍平,得到一维数组 (不适用额外的数组的话)
一下参考了 juejin.cn/post/684490…
-
-
原生的:(竟然有原生的。。)
[1,[2,[3,[4,5]]]].flat(Infinity) // Infinity 递归所有层级
-
-
-
reduce
var flattenReduce = (arr) =>{ return arr.reduce((preVal, val, i) => preVal.concat(Array.isArray(val) ? flattenReduce(val) : val), []) }
-
-
-
toString
会破坏原本的类型
var flattenUseToString = (arr)=>{ return arr.toString().split(',').map(v=> Number(v)); }
-
-
- 今天看了MDN见识了两种写法:
// 无递归数组扁平化,使用堆栈
// 注意:深度的控制比较低效,因为需要检查每一个值的深度
// 也可能在 shift / unshift 上进行 w/o 反转,但是末端的数组 OPs 更快
var arr1 = [1,2,3,[1,2,3,4, [2,3,4]]];
function flatten(input) {
const stack = [...input];
const res = [];
while (stack.length) {
// 使用 pop 从 stack 中取出并移除值
const next = stack.pop();
if (Array.isArray(next)) {
// 使用 push 送回内层数组中的元素,不会改动原始输入
stack.push(...next);
} else {
res.push(next);
}
}
// 反转恢复原数组的顺序
return res.reverse();
}
flatten(arr1);// [1, 2, 3, 1, 2, 3, 4, 2, 3, 4]
// 使用 reduce、concat 和递归展开无限多层嵌套的数组
var arr1 = [1,2,3,[1,2,3,4, [2,3,4]]];
function flatDeep(arr, d = 1) {
return d > 0 ? arr.reduce((acc, val) => acc.concat(Array.isArray(val) ? flatDeep(val, d - 1) : val), [])
: arr.slice();
};
flatDeep(arr1, Infinity);
// [1, 2, 3, 1, 2, 3, 4, 2, 3, 4]
-
手写
Promise.all测试用例比较广Promise.myAll = list=>{ return new Promise((resolve, reject) => { let result = [] let count = 0 ; list.forEach((p, i) => { // 可能会出现 非promise Promise.resolve(p).then(res=>{ result[i] = res; console.log('res', res) console.log('result', result, result.length) console.log('count', count) count++ if(count == list.length) resolve(result) // 不能拿 list.length === result.length 做结束条件,因为 length是根据最大值来的,有了2|3 就直接认定长度是2|3了.坑在这里了 }).catch(reject) }); }) } Promise.myAll([1, Promise.resolve(2), Promise.reject(3)]).then(v => console.log(v)).catch(v => console.log(v)); // 3 Promise.myAll( [new Promise((res) => setTimeout(() => res(1), 5000)), 2, Promise.resolve(3),]) .then(v => console.log(v)).catch(err=> console.log(err)); // [1, 2, 3] Promise.myAll([Promise.resolve(1), 2]).then(res=>{ console.log(res) }) // [1, 2]
自我介绍改善
真想不到还有啥能说的了
- 我是 xxx,今年xx,
山西人,2019年来深圳就职于xxx。 - 主要业务是做 xx,xx。
- 主要前端技术栈是vue,nodejs相关的前端自用服务也经常去维护开发