前端面试经典手写题型
1.请写一个函数,找出页面中出现次数最多的dom元素
主要考察了querySelectAll的使用,下面就是一个简单的排序
const maxBy = (list, keyBy) =>
list.reduce((x,y) => (keyBy(x) > keyBy(y) ? x : y))
function getFreTag() {
const tags = [...document.querySelectorAll('*')]
.map((x) => x.tagName)
.reduce((o,tag) => {
o[tag] = 0[tag] ? o[tag] + 1 : 1
return o
},{})
return maxBy(Object.entries(tags),(tag) => tag[1])
}
2.进阶:请写一个函数,找出页面中出现次数排名前三的元素
我喜欢将得到的所有元素转为一个数组,这样可以用数组上的方法,很方便
function getTop3Dom () {
const elements = Arram.from(document.querySelectorAll('*'))
const count = {}
for(const el of elements) {
const tag = el.tagName
count[tag] = (count[tag] || 0) + 1
}
const sorted = Object.entries(count)
.sort((a,b) => b[1] - a[1])
const top3 = sorted.splice(0,3)
return top3.map((i) => i[0])
}