1.给定一个数组const arr = [1,2,[3,4,5,[6,7,8]],9],实现扁平化
const arr = [1,2,[3,4,5,[6,7,8]],9]
(1)forEach递归
const resultArr = []
const flatten = function (arr) {
arr.forEach(item => {
if(Array.isArray(item)) {
flatten(item)
}else {
resultArr.push(item)
}
})
return resultArr
}
(2)reduce递归
const flatten = (arr) => {
return arr.reduce((pre, cur) => {
return pre.concat(Array.isArray(cur) ? flatten(cur) : cur)
},[])
}
(3)数组方法实现
arr.join(',').split(',').map(item => ~~item)
2. 看输出
let flag = true
const timeout = setTimeout(() => {
flag = false
}, 3000)
while(flag) {} // 答案是不会输出
alert('2')
3. 如何开启javascript的多线程?
我答的是 new webWorker()
4.还有几道基础算法题
写一个方法 : 给定一个数组,找出arr[i]+arr[j] = arr[k],如果找出返回true, 找不出返回false, 例如:
const arr = [4,6,10,2]
arr[0] + arr[1] = arr[2] // 返回true
const arr1 = [3,2,6,10]
// 找不到 返回false
原本题目忘记怎么写的了,希望各位看的明白, 在下算法很菜, 还在这种题可以for循环直接解, 只会for循环, 打扰了.
5.手写promise核心
6.口喷js单例模式
7.label编译,假如在babel编译过程中, 只编译了一般, 要如何处理
8.说说vdom实现
9.说说babel如何把javascript高阶语法转译成低阶语法的
基本上印象深刻的就这么多, 篇幅原因,答案就不详细写了, 网上一查一大堆答案, 二面的leader, 几乎所有问题都是围绕vue生命周期运行, nexttick实现,偏向原理, 这次面试因为是裸面, 再加上面试前一晚刚通宵加班做小程序, 状态欠佳, 对自己表现也不是很满意, 还在等结果。桑心呢....