2823. 深度对象筛选
2025年6月25日小于 1 分钟
2823. 深度对象筛选
type JSONValue =
| null
| boolean
| number
| string
| JSONValue[]
| { [key: string]: JSONValue }
type Obj = Record<string, JSONValue> | Array<JSONValue>
const isObject = (obj: any) => typeof obj === 'object' && obj !== null
function deepFilter(obj: Obj, fn: Function): Obj | undefined {
if (!isObject(obj)) return fn(obj) ? obj : undefined
if (Array.isArray(obj)) {
let i = 0
while (i < obj.length) {
const val = deepFilter(obj[i] as any, fn)
if (val === undefined) {
obj.splice(i, 1) // 原地删除无效值
} else {
obj[i] = val
i++
}
}
return obj.length > 0 ? obj : undefined
}
for (const key in obj) {
const val = obj[key]
const filtered = deepFilter(val as any, fn)
if (filtered === undefined) {
delete obj[key]
} else {
obj[key] = filtered
}
}
return Object.keys(obj).length > 0 ? obj : undefined
}