同花顺前端面试
2023-03-04 14:12:00
来源 : haohaofanwen.com
投稿人 : admin
下面是好好范文网小编收集整理的同花顺前端面试,仅供参考,欢迎大家阅读!
给一个长度为4的数组,数组每项都是个位数,请从4个数中去掉一个数,使得剩下的三个个位数按照他在数组中的下标顺序组成的三位数是最大的。(例如:[4,2,3,1]应该返回431)
方法一:删除小元素
思路: 因为入参是长度为4的数组,我们最后结果是3位数
那从左到右遍历,如果当前数字比下一位小的时候,删除当前元素,那么得到就会是目前最大的数字,
如果数组遍历完成仍没有删除元素,则我们取前三位就会是最大的数字。来上代码。
functionmakeMax(arr) { // 默认取前3位,对应思路的第二步let res = arr.slice(0, 3); let tempArr = [...arr]; for(let i = 0, l = tempArr.length; i < l; i++) { if(arr[i + 1] && arr[i] < arr[i + 1]) { tempArr.splice(i, 1); returnNumber(tempArr.join('')); } } returnNumber(arr.slice(0, 3).join(''));}复制代码
方法二:获取到所有组合,然后选取最大
functionmakeMax(arr) { let res = ; for(let i = 0, l = arr.length; i < l; i++) { const num = Number(arr.slice(0, i).join('') + arr.slice(i + 1).join('')); res.push(num); } returnMath.max(...res);}复制代码
[...newSet([...document.querySelectorAll('*')].map(dom => dom.tagName.toLowerCase()))]复制代码
2. 实现ts中的ReturnType<T>
type ReturnType<T extends (...args: any) => any> = T extends (...args: any) => infer R ? R : any; 复制代码
3. 手写bind
4. 实现EventEmitter类,包括on,emit,off,once方法
classEventEmitter { constructor(opt){ this.events = ; } on(event, fn) { if(!this.events[event]) { this.events[event] = ; } this.events[event].push(fn); } emit(event) { const fns = this.events[event] || ; fns.forEach(fn => { fn(); }) } off(event, fn) { const fns = this.events[event]; if(fn) { const index = fns.indexOf(fn); fns.splice(index, 1); } else { this.events[event] = ; } } once(event, fn) { constcallback = () => { fn(); this.off(event, fn); } this.events.push(event, callback); }}复制代码