[Medium] LeetCode JS 30 - 2705. Compact Object (精简物件)
2024年3月7日
💎 加入 E+ 成長計畫 與超過 500+ 位軟體工程師一同在社群中成長,並且獲得更多的軟體工程學習資源
LeetCode 30 Days of JavaScript
本题来自 LeetCode 的 30 天 JacaScript 挑战
2705. Compact Object (精简物件)题目描述
给定一个物件或阵列 obj
,传回一个精简物件 (compact object)。精简物件与原始物件相同,只是会将包含伪值 (falsy) 的键移除。此操作适用于物件及其巢状物件 (nested object)。
阵列会被当作索引作为键的物件,当 Boolean(value)
传回 false
时,该索引的值会被视为伪值。
你可以假设 obj
是 JSON.parse
输出的结果。换句话说,它是有效的 JSON。
// 范例1:
输入: obj = [null, 0, false, 1]
输出: [1]
解释:阵列中的所有伪值已移除。
// 范例2:
输入: obj = {"a": null, "b": [false, 1]}
输出: {"b": [1]}
解释: obj["a"] 和obj["b"][0]包含伪值,因此被移除。
本题解答
var compactObject = function (obj) {
if (typeof obj !== "object" || obj === null) {
return obj;
}
if (Array.isArray(obj)) {
return obj.map((value) => compactObject(value)).filter(Boolean);
}
const result = {};
for (const key in obj) {
const value = compactObject(obj[key]);
if (value) {
result[key] = value;
}
}
return result;
};