[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时,该索引的值会被视为伪值。

你可以假设 objJSON.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;
};
🧵 如果你想收到最即時的內容更新,可以在 FacebookInstagram 上追蹤我們