在JavaScript中递归移除虚假值

JavaScriptJavaScriptBeginner
立即练习

This tutorial is from open-source community. Access the source code

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本实验中,我们将探讨如何使用递归从 JavaScript 对象或数组中深度移除所有虚假值。我们将创建一个函数,该函数以对象或数组作为输入,并返回一个新的、仅包含真值的精简对象或数组。此技术在各种编程应用中的数据清理和简化方面可能很有用。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL javascript(("`JavaScript`")) -.-> javascript/BasicConceptsGroup(["`Basic Concepts`"]) javascript(("`JavaScript`")) -.-> javascript/AdvancedConceptsGroup(["`Advanced Concepts`"]) javascript/BasicConceptsGroup -.-> javascript/variables("`Variables`") javascript/BasicConceptsGroup -.-> javascript/data_types("`Data Types`") javascript/BasicConceptsGroup -.-> javascript/arith_ops("`Arithmetic Operators`") javascript/BasicConceptsGroup -.-> javascript/comp_ops("`Comparison Operators`") javascript/BasicConceptsGroup -.-> javascript/cond_stmts("`Conditional Statements`") javascript/BasicConceptsGroup -.-> javascript/array_methods("`Array Methods`") javascript/AdvancedConceptsGroup -.-> javascript/higher_funcs("`Higher-Order Functions`") subgraph Lab Skills javascript/variables -.-> lab-28206{{"`在JavaScript中递归移除虚假值`"}} javascript/data_types -.-> lab-28206{{"`在JavaScript中递归移除虚假值`"}} javascript/arith_ops -.-> lab-28206{{"`在JavaScript中递归移除虚假值`"}} javascript/comp_ops -.-> lab-28206{{"`在JavaScript中递归移除虚假值`"}} javascript/cond_stmts -.-> lab-28206{{"`在JavaScript中递归移除虚假值`"}} javascript/array_methods -.-> lab-28206{{"`在JavaScript中递归移除虚假值`"}} javascript/higher_funcs -.-> lab-28206{{"`在JavaScript中递归移除虚假值`"}} end

精简对象算法

要从对象或数组中深度移除所有虚假值,请使用以下算法:

  1. 使用递归对每个嵌套的对象或数组调用 compactObject() 函数。
  2. 使用 Array.isArray()Array.prototype.filter()Boolean() 初始化可迭代数据。这样做是为了避免稀疏数组。
  3. 使用 Object.keys()Array.prototype.reduce() 以适当的初始值遍历每个键。
  4. 使用 Boolean() 确定每个键值的真值性,如果为真值则将其添加到累加器中。
  5. 使用 typeof 确定给定值是否为 object,并再次调用该函数以深度精简它。

以下是 compactObject() 函数的代码:

const compactObject = (val) => {
  const data = Array.isArray(val) ? val.filter(Boolean) : val;
  return Object.keys(data).reduce(
    (acc, key) => {
      const value = data[key];
      if (Boolean(value))
        acc[key] = typeof value === "object" ? compactObject(value) : value;
      return acc;
    },
    Array.isArray(val) ? [] : {}
  );
};

要使用此函数,将对象或数组作为参数传递给 compactObject()。该函数将返回一个移除了所有虚假值的新对象或数组。

例如:

const obj = {
  a: null,
  b: false,
  c: true,
  d: 0,
  e: 1,
  f: "",
  g: "a",
  h: [null, false, "", true, 1, "a"],
  i: { j: 0, k: false, l: "a" }
};
compactObject(obj);
// { c: true, e: 1, g: 'a', h: [ true, 1, 'a' ], i: { l: 'a' } }

总结

恭喜你!你已经完成了精简对象实验。你可以在 LabEx 中练习更多实验来提升你的技能。

您可能感兴趣的其他 JavaScript 教程