zoukankan      html  css  js  c++  java
  • JS去除对象或数组中的空值('',null,undefined,[],{})

    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)))
  • 相关阅读:
    VS2013折叠代码、打开代码的快捷键
    用if做了一个简单的猜拳游戏(做的不好还请指点,谢谢!)
    一维数组的应用
    do while 与while的区别!
    作业.把c语言输出的基础差不多都概括了!
    C语言基础
    c语言:蜗牛的爬行。
    QQ群成员提取
    入门教程2
    VMware WorkStations最小化安装&配置&卸载CentOS 7
  • 原文地址:https://www.cnblogs.com/magicg/p/15320155.html
Copyright © 2011-2022 走看看