Рекурсивное удаление ложных значений в JavaScript

JavaScriptJavaScriptBeginner
Практиковаться сейчас

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

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии мы изучим, как использовать рекурсию для глубокого удаления всех ложных значений из объекта или массива в JavaScript. Мы создадим функцию, которая принимает объект или массив в качестве входных данных и возвращает новый, сжатый объект или массив, содержащий только истинные значения. Эта техника может быть полезна для очистки и упрощения данных в различных приложениях программирования.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL javascript(("JavaScript")) -.-> javascript/AdvancedConceptsGroup(["Advanced Concepts"]) javascript(("JavaScript")) -.-> javascript/BasicConceptsGroup(["Basic 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, чтобы улучшить свои навыки.