我得到了一个对象,它看起来像这样:
{
"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
的值。
我想使用ES6方法增强这个removeNull
的方法,但是到目前为止我还没有做到。
我还尝试了用于此How to deeply remove null values, empty objects and empty array from an object的老方法
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;
};
但也失败了。
9条答案
按热度按时间f3temu5u1#
您可以采取直接的方法,即迭代对象的键/值对,首先迭代嵌套的可迭代对象,然后删除不需要的键。
第一个
krcsximq2#
您可以利用
JSON.stringify
及其可选的第二个参数replacer
,但请注意以下代码会删除null
* 和 *undefined
。hfyxw5xn3#
感谢尼娜·肖尔茨,我的增强版将是:
doinxwow4#
如果你不想改变对象,需要一个新的副本,那么你可以将对象字符串化为json并解析它,在解析的时候过滤。如果你不需要源对象,那么你可以覆盖结果到相同的引用中。这可能不是一个性能高效的方法,但显然更干净,也不是一个自递归的方法。
如果值为
Object
或Array
,则typeof
将返回object
,Object.keys
将返回两种情况下的键数组("0", "1"
,2
...如果是数组),以及数组长度如果它是一个空数组或对象,则(键的)将为0。因此,有条件地,它将不能(null
、undefined
或""
)和(非object/array
ORobject/array
,它是非空的,然后您可以获取该值。igetnqfo5#
若要移除空数组、字串、null、未定义的值
soat7uwm6#
我刚刚解决了同样的问题,所以我想和大家分享一下。我的代码也清理了嵌套对象和数组,可以根据你的要求进行定制:
sbdsn5lh7#
我试了一下
这对我来说最高可达第n级
oewdyzsn8#
输出=〉{ a:50,B:90,戊:{甲:90,B:80 },f:{} }
3phpmpom9#
移除未定义、null、空字串、空数组。如果有帮助,请投赞成票。