Введение
В этом практическом занятии мы изучим, как использовать рекурсию для глубокого удаления всех ложных значений из объекта или массива в JavaScript. Мы создадим функцию, которая принимает объект или массив в качестве входных данных и возвращает новый, сжатый объект или массив, содержащий только истинные значения. Эта техника может быть полезна для очистки и упрощения данных в различных приложениях программирования.
Алгоритм сжатия объекта
Для глубокого удаления всех ложных значений из объекта или массива используйте следующий алгоритм:
- Используйте рекурсию для вызова функции
compactObject()для каждого вложенного объекта или массива. - Инициализируйте итерируемые данные с использованием
Array.isArray(),Array.prototype.filter()иBoolean(). Это делается для избежания создания разреженных массивов. - Используйте
Object.keys()иArray.prototype.reduce(), чтобы перебрать каждый ключ с соответствующим начальным значением. - Используйте
Boolean(), чтобы определить истинность значения каждого ключа, и добавьте его в аккумулятор, если оно истинно. - Используйте
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, чтобы улучшить свои навыки.