给候选人做的题,应该好理解,如果讲半天题目,对方都不理解,我都怀疑是不是我的表达能力不行。题目足够简单,我讲解题目也省事,对方不理解或者不能做出来,则淘汰就好,我心里也没有负担。
有一个对象如下:
let tree = {
a: {
b: {
c: '2',
f: '3',
z: {
s: '3'
}
}
},
d: {
c: '2'
}
}
实现一个函数,我们要把叶子节点为 3 的对象过滤出来,得到如下对象:
{
"a": {
"b": {
"f": "3",
"z": {
"s": "3"
}
}
}
}
该怎么实现这个函数呢?
let tree = {
a: {
b: {
c: '2',
f: '3',
z: {
s: '3'
}
}
},
d: {
c: '2'
}
}
function fn(obj, filters=[]) {
let res = Object.create(null)
if (typeof obj !== 'object') {
return filters.includes(obj)
}
let flag = false
for (let k in obj) {
let exist = fn(obj[k], filters)
if (!exist)
continue
flag = true
if (typeof exist === 'object') {
res[k] = exist
} else {
res[k] = obj[k]
}
}
return flag ? res : false
}
console.log(fn(tree, ['3']))