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)))


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM