从 JavaScript 中的对象中删除空白属性
在 JavaScript 中,对象可以具有未定义或 null 的属性,这可能会使代码变得混乱并使工作变得更加困难。为了解决这个问题,我们可以使用各种技术从对象中删除这些空白属性。
ES10/ES2019
这些方法使用了 Object.fromEntries() 的引入方法:
- 一行:let o = Object.fromEntries(Object.entries(obj).filter(([_, v]) => v != null));
- 与上面相同,但作为一个函数: function removeEmpty(obj) { return Object.fromEntries(Object.entries(obj).filter(([_, v]) => v != null)); }
- 从嵌套对象中删除项目的递归版本: function removeEmpty(obj) { return Object.fromEntries( Object.entries(obj) .filter(([_, v]) => v != null) .map(([k, v]) => [k, v === Object(v) ? removeEmpty(v) : v]) ); }
ES6/ES2015
- 变异单行:Object.keys(obj).forEach((k) => obj [k] == null && 删除 obj[k]);
- A非变异版本: let o = Object.keys(obj) .filter((k) => obj[k] != null) .reduce((a, k) => ({ ...a, [ k]: obj[k] }), {});
- 与上面类似,写成函数: function removeEmpty(obj) { return Object.entries(obj) .filter(([_, v]) => v != null) .reduce((acc, [k, v]) => ({ ...acc, [k]: v }), {} ); }
- 处理嵌套对象的递归函数: function removeEmpty(obj) { return Object.entries(obj) .filter(([_, v]) => v != null) .reduce( ( acc, [k, v]) => ({ ...acc, [k]: v === Object(v) ? removeEmpty(v) : v }), {} ); }
ES5/ES2009
- 函数式非递归版本: function removeEmpty(obj) { return Object.keys(obj) .filter (function (k) { return obj[k] != null; }) .reduce(function (acc, k) { acc[k] = obj[k]; 返回 acc; }
- 递归函数版本: function removeEmpty(obj) { return Object.keys(obj) .filter(function (k) { return obj[k] != null; }) .reduce(function (acc , k) { acc[k] = typeof obj[k] === "object" ?removeEmpty(obj[k]) : obj[k]; ACC; }, {}); }
以上是如何从 JavaScript 对象中删除 Null 或未定义的属性?的详细内容。更多信息请关注PHP中文网其他相关文章!