Я получил объект, который выглядит следующим образом:
{
"a": "string not empty",
"b": {
"c": "string not empty",
},
"d": {
"e": false,
"f": 0,
"g": true,
"h": 10
},
"i": {
"j": 0,
"k": null
},
"l": {
"m": null
},
"n": {
"o": 1,
"p": "string (not empty)",
"q": {}
},
"r": [],
"l": "2000-01-01T01:01:00.000Z",
}
Благодаря приведенному здесь коду: https://stackoverflow.com/a/38364486/3912805 Теперь я могу удалить все null
значения моего вложенного объекта.
Я использовал эту функцию до removeNull
:
removeNull = (obj) => {
Object.keys(obj).forEach(key =>
(obj[key] && typeof obj[key] === 'object') && removeNull(obj[key]) ||
(obj[key] === undefined || obj[key] === null) && delete obj[key]
);
return obj;
};
Но я хотел бы улучшить эту функцию, чтобы позволить мне удалять все пустые массивы или любую пустую коллекцию, которая может существовать в моемвложенный объект.
Окончательные результаты должны быть без k
, l
& m
, q
, r
, l
:
{
"a": "string not empty",
"b": {
"c": "string not empty",
},
"d": {
"e": false,
"f": 0,
"g": true,
"h": 10
},
"i": {
"j": 0
},
"n": {
"o": 1,
"p": "string (not empty)"
},
"l": "2000-01-01T01:01:00.000Z",
}
Мне нужно сохранить все значения, которые были установлены на 0
или false
.
Я хотел бы усовершенствовать этот метод removeNull
с использованием метода ES6, но пока мне не удалосьсделайте это.
Я также попробовал метод старой школы, который использовался для этого Как глубоко удалить нулевые значения, пустые объекты и пустой массив из объекта
itemToBool = item => {
if (typeof item !== 'object' || item === null) return item;
const cleanedItem = cleanObject(item);
return Object.keys(cleanedItem).length !== 0 && cleanedItem;
};
cleanObject = obj => {
if (Array.isArray(obj)) {
const newArr = obj.map(itemToBool).filter(Boolean);
return newArr.length && newArr;
}
const newObj = Object.entries(obj).reduce((a, [key, val]) => {
const newVal = itemToBool(val);
if (newVal !== null || newVal === false) a[key] = newVal;
return a;
}, {});
return Object.keys(newObj).length > 0 && newObj;
};
но тоже не получается.