[Medium] LeetCode JS 30 - 2705. Compact Object (精簡物件)

2024年3月7日

💎 加入 E+ 成長計畫 與超過 300+ 位軟體工程師一同在社群中成長,並且獲得更多的軟體工程學習資源

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 上追蹤我們