处理流程:
使用递归。
初始化可迭代数据,使用 Array.isArray(),Array.prototype.filter() 和 Boolean 处理数组数据以避免稀疏数组。
使用 Object.keys() 和 Array.prototype.reduce() 以适当的初始值遍历每个键。
使用Boolean 确定每个键值的真实性,如果真实则将其添加到累加器中。
使用 typeof 确定给定值是否为 一个 object 并再次调用该函数以对其进行深度压缩。
JavaScript
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) ? [] : {}
);
};
示例代码如下所示:
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' } }
更多内容请访问我的网站:https://www.icoderoad.com