每日一题:精简对象
现给定一个对象或数组 obj,返回一个 精简对象 。精简对象 与原始对象相同,只是将包含 假 值的键移除。该操作适用于对象及其嵌套对象。数组被视为索引作为键的对象。当 Boolean(value) 返回 false 时,值被视为假值。
你可以假设 obj 是 JSON.parse 的输出结果。换句话说,它是有效的 JSON。
示例:
输入:obj = [null, 0, false, 1]
输出:[1]
解释:数组中的所有假值已被移除。
代码块:
function compact0bject(obj) {
function dfs(obj) {
if (!obj) return false;
if (typeof obj !== 'object') return obj;
if (Array.isArray(obj)) {
const newArr = [];
for (let i = 0; i < obj.length; i++) {
const curr = obj[i];
const subRes = dfs(curr);
if (subRes) {
newArr.push(subRes);
}
}
return newArr;
}
const newObj = {};
for (const key in obj) {
const subRes = dfs(obj[key]);
if (subRes) {
newObj[key] = subRes;
}
}
return newObj;
}
return dfs(obj);
}