从 Javascript 中的对象中删除空白属性
使用 JavaScript 对象时,可能需要删除未定义或 null 的属性。这可以帮助清理数据、删除不必要的字段或准备存储对象。根据所使用的 JavaScript 版本,有多种方法可以完成此任务。
ES10/ES2019
在 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
中ES6/ES2015,可以使用以下一行,但请注意,它会改变原始对象而不是创建一个新对象:
Object.keys(obj).forEach((k) => obj[k] == null && delete obj[k]);
或者,以下单个声明将创建一个新对象而不发生改变原文:
let o = Object.keys(obj) .filter((k) => obj[k] != null) .reduce((a, k) => ({ ...a, [k]: obj[k] }), {});
这可以写成一个函数well:
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
在 ES5/ ES2009,代码比较多详细:
function removeEmpty(obj) { return Object.keys(obj) .filter(function (k) { return obj[k] != null; }) .reduce(function (acc, k) { acc[k] = obj[k]; return acc; }, {}); }
这也可以用命令式风格编写:
function removeEmpty(obj) { const newObj = {}; Object.keys(obj).forEach(function (k) { if (obj[k] && typeof obj[k] === "object") { newObj[k] = removeEmpty(obj[k]); } else if (obj[k] != null) { newObj[k] = obj[k]; } }); return newObj; }
最后,用函数式风格编写的递归版本:
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]; return acc; }, {}); }
通过应用这些技术,您可以有效地从不同版本的 JavaScript 中的对象中删除空白属性,确保您的数据干净并准备好进一步处理或存储。
以上是如何从 JavaScript 对象中删除 Null 和未定义的属性?的详细内容。更多信息请关注PHP中文网其他相关文章!