/**
* @param {Object} obj
* @return {Object}
*/
var compactObject = function(obj) {
};
2705. 精简对象
现给定一个对象或数组 obj
,返回一个 精简对象 。精简对象 与原始对象相同,只是将包含 假 值的键移除。该操作适用于对象及其嵌套对象。数组被视为索引作为键的对象。当 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] 包含假值,因此被移除。
示例 3:
输入:obj = [null, 0, 5, [0], [false, 16]] 输出:[5, [], [16]] 解释:obj[0], obj[1], obj[3][0], 和 obj[4][0] 包含假值,因此被移除。
提示:
obj 是一个有效的 JSON 对象
2 <= JSON.stringify(obj).length <= 106
原站题解
typescript 解法, 执行用时: 104 ms, 内存消耗: 51.6 MB, 提交时间: 2023-05-31 15:15:16
const isObject = (val: unknown): val is object => typeof val === "object" && val !== null; const isArray = Array.isArray; type Obj = Record<any, any>; function compactObject(obj: Obj): Obj { let result: Obj; if (isArray(obj)) { result = []; for (const value of obj) { if (isObject(value)) { result.push(compactObject(value)); } else if (value) { result.push(value); } } } else { result = {}; const keys = Object.keys(obj); for (const key of keys) { const value = obj[key]; if (isObject(value)) { result[key] = compactObject(value); } else if (value) { result[key] = value; } } } return result; }
javascript 解法, 执行用时: 100 ms, 内存消耗: 53.6 MB, 提交时间: 2023-05-31 15:14:57
/** * @param {Object} obj * @return {Object} */ var compactObject = function (obj) { if (Array.isArray(obj)) { //如果obj是一个数组,则过滤掉错误的值,并在每个元素上递归调用compactObject return obj.filter(Boolean).map(compactObject); } else if (typeof obj === "object" && obj !== null) { //如果obj是一个对象,那么创建一个新对象并对每个值递归调用compactObject return Object.keys(obj).reduce(function (acc, key) { var compactedValue = compactObject(obj[key]); if (compactedValue) { acc[key] = compactedValue; } return acc; }, {}); } else { //如果obj不是数组或对象,如果truthy则返回原始值,如果falsy则返回null return obj || null; } };