去除JavaScript对象中空值和空对象的四种方式

 更新时间:2023年09月18日 10:17:12   作者:MoYoon  
开发时遇到一个问题,需要将对象中的空值和空对象去除,所以这篇文章主要给大家介绍了关于去除JavaScript对象中空值和空对象的四种方式,需要的朋友可以参考下

前言

在 JavaScript 开发中,我们经常需要处理对象数据,但有时这些对象可能包含一些空值或空对象。在处理数据时,通常需要将这些空值或空对象去除,以便得到更干净、更紧凑的数据结构。本文将介绍几种方法,教你如何去除 JavaScript 对象中的空值和空对象。

方法一:使用循环和 delete 关键字

第一种方法是通过循环遍历对象的每个属性,并使用 delete 关键字从对象中删除空值或空对象。这个方法比较直接,适用于处理较小的对象。

function removeEmptyValues(obj) {
  for (const key in obj) {
    if (obj[key] === null || obj[key] === undefined) {
      delete obj[key];
    } else if (typeof obj[key] === 'object' && Object.keys(obj[key]).length === 0) {
      delete obj[key];
    }
  }
  return obj;
}
const myObject = {
  name: 'John',
  age: null,
  address: {
    city: 'New York',
    zipCode: undefined,
  },
  hobbies: [],
};
const result = removeEmptyValues(myObject);
console.log(result);
// Output: { name: 'John', address: { city: 'New York' } }

方法二:最简洁的,使用 JSON.stringify() 和 JSON.parse()

第二种方法是先将对象转换为 JSON 字符串,再将 JSON 字符串转换回对象。在这个过程中,JSON.stringify() 方法会自动去除 null 值,从而达到去除空值和空对象的效果。不过需要注意的是,这个方法会将对象中的函数非原始类型的属性转换为字符串形式,因为 JSON 只支持原始数据类型。

function removeEmptyValues(obj) {
  const jsonString = JSON.stringify(obj);
  const parsedObj = JSON.parse(jsonString);
  return parsedObj;
}
const myObject = {
  name: 'John',
  age: null,
  address: {
    city: 'New York',
    zipCode: undefined,
  },
  hobbies: [],
};
const result = removeEmptyValues(myObject);
console.log(result);
// Output: { name: 'John', address: { city: 'New York' } }

方法三:使用 Object.keys() 和 reduce()

第三种方法使用 Object.keys() 方法获取对象的所有属性键,然后使用 reduce() 方法遍历这些属性,并构建新的对象,只包含非空值的属性。

function removeEmptyValues(obj) {
  return Object.keys(obj).reduce((acc, key) => {
    if (obj[key] !== null && obj[key] !== undefined && !(typeof obj[key] === 'object' && Object.keys(obj[key]).length === 0)) {
      acc[key] = obj[key];
    }
    return acc;
  }, {});
}
const myObject = {
  name: 'John',
  age: null,
  address: {
    city: 'New York',
    zipCode: undefined,
  },
  hobbies: [],
};
const result = removeEmptyValues(myObject);
console.log(result);
// Output: { name: 'John', address: { city: 'New York' } }

方法四:最全面的,使用 Lodash 库

第四种方法使用 Lodash 库的omitBy()方法,它可以很方便地去除对象中的空值和空对象。omitBy() 方法接受一个函数作为参数,用于判断哪些属性需要被排除。

const _ = require('lodash');
const myObject = {
  name: 'John',
  age: null,
  address: {
    city: 'New York',
    zipCode: undefined,
  },
  hobbies: [],
};
const result = _.omitBy(myObject, (value) => value === null || value === undefined || (_.isObject(value) && _.isEmpty(value)));
console.log(result);
// Output: { name: 'John', address: { city: 'New York' } }

结论

本文介绍了四种方法用于去除 JavaScript 对象中的空值和空对象。通过使用循环和 delete 关键字、JSON.stringify() 和 JSON.parse()Object.keys() 和 reduce(),以及 Lodash 库的 omitBy() 方法,你可以根据项目需求选择最适合的方法。在处理大型对象时,建议使用 Lodash 库,它提供了更多的功能和灵活性。不论你选择哪种方法,去除空值和空对象能让你得到更整洁、更易读的数据,提高 JavaScript 代码的质量和可维护性。

总结

到此这篇关于去除JavaScript对象中空值和空对象的四种方式的文章就介绍到这了,更多相关JS对象中空值和空对象去除内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 微信小程序中获取设备信息的方法

    微信小程序中获取设备信息的方法

    这篇文章主要给大家介绍了关于微信小程序中获取设备信息的相关资料,微信小程序是一种在微信平台上运行的应用程序,它具有轻量化、便捷性和高兼容性的特点,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-07-07
  • js prototype和__proto__的关系是什么

    js prototype和__proto__的关系是什么

    这篇文章主要介绍了js prototype和__proto__的关系是什么,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • DHTML 中的绝对定位

    DHTML 中的绝对定位

    DHTML 中的绝对定位...
    2006-11-11
  • V8实现字符串拼接

    V8实现字符串拼接

    本文主要介绍了V8实现字符串拼接,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • Javascript 读取操作Sql中的Xml字段

    Javascript 读取操作Sql中的Xml字段

    把Xml字段先读出来,然后用Js去操作,这样岂不是简单了许多,于是网上搜索了一些JS读Xml字段信息的方法
    2014-10-10
  • JavaScript的new date等日期函数在safari中遇到的坑

    JavaScript的new date等日期函数在safari中遇到的坑

    safari中对于JavaScript的new Date函数的支持有一个比较奇怪的问题,带着这个奇怪的问题我们通过本文一起学习吧
    2016-10-10
  • js页面加载后执行的几种方式小结

    js页面加载后执行的几种方式小结

    在实际应用中往往需要在页面加载完毕之后再去执行相关的js代码,之所以这么操作是有道理的,如果是操作dom元素,如果相关元素没有加载完成,而去执行js代码,可能会导致错误
    2020-01-01
  • canvas学习之API整理笔记(一)

    canvas学习之API整理笔记(一)

    本文主要介绍了canvas的相关知识。canvas本身很简单,就是去学习它的API,多看实例,多自己动手练习,多总结。本文介绍了很多小例,具有一定的参考价值,下面跟着小编一起来看下吧
    2016-12-12
  • 为超链接加上disabled后的故事

    为超链接加上disabled后的故事

    为超链接加上disabled后的故事,学习js的朋友可以参考下对超链接的一些控制。
    2010-12-12
  • layui表格设计以及数据初始化详解

    layui表格设计以及数据初始化详解

    今天小编就为大家分享一篇layui表格设计以及数据初始化详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-10-10

最新评论