列表

详情


2705. 精简对象

现给定一个对象或数组 obj,返回一个 精简对象精简对象 与原始对象相同,只是将包含 值的键移除。该操作适用于对象及其嵌套对象。数组被视为索引作为键的对象。当 Boolean(value) 返回 false 时,值被视为 值。

你可以假设 objJSON.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] 包含假值,因此被移除。

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
/** * @param {Object} obj * @return {Object} */ var compactObject = function(obj) { };

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;
    }
};

上一题