如何使用JavaScript移除JSON中含空值、null、undefined的属性?
移除JSON中空字符串、null、undefined属性的正确JavaScript实现
问题场景
现有如下JSON数据,其中多个属性值为空字符串,需要移除所有值为空字符串、null或undefined的对应属性:
const dataJSON = { "Cli Info:Sub_Ind": "", "Cli Info:Sub_Mat": "", "Cli Info:Sub_Ewwu": "", "Cli Info:Sub_kjlo": "", "Cli Info:Sub_uti": "", "S Funds:S_C_origin": "Afghanistan;Albania", "S We:Count_we": "Antigua & Barbuda;American Samoa;Austria", "Add Juri:Jurid_Coun": "Andorra;Angola" }
尝试了以下clean函数但未生效:
function clean(obj) { for (var propName in obj) { if (obj[propName] === null || obj[propName] === undefined) { delete obj[propName]; } } return obj }
问题根源:原函数仅判断了null和undefined,未处理空字符串(''),因此值为空字符串的属性无法被移除。
修正后的实现
方法一:直接修改原对象
在判断条件中加入空字符串的检查即可:
function clean(obj) { for (var propName in obj) { // 同时匹配空字符串、null、undefined if (obj[propName] === null || obj[propName] === undefined || obj[propName] === '') { delete obj[propName]; } } return obj; } // 调用示例 const cleanedData = clean(dataJSON); console.log(cleanedData);
执行后会直接修改原对象,移除所有符合条件的属性。
方法二:生成新对象(不修改原数据,推荐)
如果需要保留原始数据,可以通过Object.entries和Object.fromEntries组合创建新对象:
function clean(obj) { return Object.fromEntries( Object.entries(obj).filter(([key, value]) => { // 保留非空、非null、非undefined的属性 return value !== null && value !== undefined && value !== ''; }) ); } // 调用示例 const cleanedData = clean(dataJSON); console.log(cleanedData);
这种方式会返回一个全新的干净对象,原对象保持不变,更适合需要保留原始数据的场景。
两种方法执行后,最终结果均为:
{ "S Funds:S_C_origin": "Afghanistan;Albania", "S We:Count_we": "Antigua & Barbuda;American Samoa;Austria", "Add Juri:Jurid_Coun": "Andorra;Angola" }
内容的提问来源于stack exchange,提问作者Abhijeet
相关产品推荐
相关产品推荐

