JS去除对象或数组中的空值('',null,undefined,[],{})

摘要:
Javascript从对象或数组中删除“”、null、undefined、[]、{}。其想法是创建一个新的空对象,然后遍历传入对象。只返回限定属性,并保留有效值。然后删除空值。FunctionremoveEmptyField{varnewObj={}if{obj=JSON.parse}if{newObj=[]}if{for{//属性值不是“”、null、未定义,然后添加到新对象if(obj.hasOwnProperty(attr)&&obj[attr]!

javascript去掉对象或数组中的'',null,undefined,[],{}。
思路就是创建一个新的空对象,然后对传入的对象进行遍历,只把符合条件的属性返回,保留有效值,然后就相当于把空值去掉了。
(可以根据注释来修改方法决定要去除哪些属性)

function removeEmptyField(obj) {
  var newObj = {}
  if (typeof obj === 'string') {
    obj = JSON.parse(obj)
  }
  if (obj instanceof Array) {
    newObj = []
  }
  if (obj instanceof Object) {
    for (var attr in obj) {
      // 属性值不为'',null,undefined才加入新对象里面(去掉'',null,undefined)
      if (obj.hasOwnProperty(attr) && obj[attr] !== '' && obj[attr] !== null && obj[attr] !== undefined) {
        if (obj[attr] instanceof Object) {
          // 空数组或空对象不加入新对象(去掉[],{})
          if(JSON.stringify(obj[attr]) === '{}' || JSON.stringify(obj[attr]) === '[]') {
              continue
          }
          // 属性值为对象,则递归执行去除方法
          newObj[attr] = removeEmptyField(obj[attr])
        } else if (
          typeof obj[attr] === 'string' &&
          ((obj[attr].indexOf('{') > -1 && obj[attr].indexOf('}') > -1) ||
            (obj[attr].indexOf('[') > -1 && obj[attr].indexOf(']') > -1))
        ) {
          // 属性值为JSON时
          try {
            var attrObj = JSON.parse(obj[attr])
            if (attrObj instanceof Object) {
              newObj[attr] = removeEmptyField(attrObj)
            }
          } catch (e) {
            newObj[attr] = obj[attr]
          }
        } else {
          newObj[attr] = obj[attr]
        }
      }
    }
  }
  return newObj
}

const testObj = {
    a: '',
    b: 123,
    c: null,
    d: undefined,
    e: [],
    f: [1,2,3,'',null],
    g: {},
    h: {x:1,y:'',z:null}
}

console.log(removeEmptyField(testObj))
console.log(JSON.stringify(removeEmptyField(testObj)))

免责声明:文章转载自《JS去除对象或数组中的空值('',null,undefined,[],{})》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇分享一个Winform里面的HTML编辑控件Zeta HTML Edit Control,汉化附源码C#基础系列——多线程 信号量 异步 编程 Task Thread async和await下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

js开启和关闭页面滚动【亲测有效】

在移动端的页面开发过程中,经常会遇到点击弹框禁止页面滚动的情景,下面就来说下具体的做法。。。 第一步:构建一个函数 function bodyScroll(event){ event.preventDefault(); } 第二步:点击禁止页面滚动 $(".button").click(function(){ document.body....

前端js上传文件 到后端接收文件

下面是前端js代码: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> <title>File upload</title> </head>...

Vue 数组和对象更新,但是页面没有刷新

在使用数组的时候,数组内部数据发生改变,但是与数组绑定的页面的数据却没有发生变化。 <ul> <li v-for="(item,index) in todos" :key="index">{{item.name}}</li> </ul>    data () { return {...

yii2框架随笔35

今天来看vendor/yiisoft/yii2/base/Event.php <?php namespace yiibase; //事件是所有事件类的基类。它封装了参数与事件相关联。 //如果一个事件处理程序集[[进行]]是真的,其余的,uninvoked处理程序将不再被称为处理事件。 //另外,添加一个事件处理程序时,额外的数据可能被传递...

前端js几种加密/解密方法

一、base64加密 base64的github地址 示例 <html> <head> <title>前端的base64使用方法</title> </head> <body> </body> <script>...

js之预解析

一、所谓的预解析就是:在当前作用域中,JavaScript代码执行之前,浏览器首先会默认的把所有带var和function声明的变量进行提前的声明或者定义。 1)var声明的变量在预解析的时候只是提前的声明, 2)function声明的函数在预解析的时候会提前声明并且会同时定义。 二、预解析只发生在当前的作用域下 程序最开始的时候,只对window下的...