Рекурсивно обходите JSON-структуру, отбрасывая falsy-значения и сохраняя остальные. Пустые объекты и массивы truthy, поэтому остаются.
Реализуйте рекурсивную функцию, которая принимает значение, полученное через `JSON.parse` (объект, массив или примитив), и удаляет все falsy-значения из вложенных объектов и массивов.
Рекурсивно обходите JSON-структуру, отбрасывая falsy-значения и сохраняя остальные. Пустые объекты и массивы truthy, поэтому остаются.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Рекурсивно обходите JSON-структуру, отбрасывая falsy-значения и сохраняя остальные. Пустые объекты и массивы truthy, поэтому остаются.
Договоримся, что для удалённого корневого значения возвращается undefined; исходные данные не меняются.
function removeFalsy(value) {
if (!value) return undefined;
if (Array.isArray(value)) return value.filter(Boolean).map(removeFalsy);
if (typeof value === 'object') {
return Object.fromEntries(
Object.entries(value)
.filter(([, item]) => Boolean(item))
.map(([key, item]) => [key, removeFalsy(item)])
);
}
return value;
}
Для JSON удаляются null, false, 0 и пустая строка. Строка '0' сохраняется. Время линейно по размеру дерева; чрезмерная глубина может переполнить стек рекурсии.