递归判断JS对象内所有属性值是否为空,并返回空值的key和value

递归判断JS对象内所有属性值是否为空,并返回空值的key和value

代码

const paramsValidate = (obj: any, ...roles: Array<Array<string>>) => {
  let currentKey:Array<string> = [] // 当前的Key
  let unValidateKeyArr:Map<Array<string>, string> = new Map() // 未通过的Key
  const valNull = (obj: any) => {
    for(let k in obj) {    
      if(obj[k] instanceof Object) {
        currentKey.push(k)
        valNull(obj[k])
        currentKey.pop()
      } 
      currentKey.push(k)
      // 判定空值
      const valueRule = obj[k] === undefined || obj[k] === null || obj[k] === ''
      // 判断空对象,空数组
      const objRule = obj[k] instanceof Object && Object.keys(obj[k]).length === 0
      // 判定是否跳过该条件
      const customRole = !roles.find(role => {
        return JSON.stringify(role) === JSON.stringify(currentKey)
      })
      if((valueRule || objRule) && customRole) {
        unValidateKeyArr.set(currentKey.slice(), obj[k])
      }
      currentKey.pop()
    }
    return unValidateKeyArr
  }
  return valNull(obj)
}

测试用例

let o = {
  name: "张三Z", 
  age: undefined,
  school: null,
  idCard: { id: '', img: ''},
  id: '',
  arr: [],
  t: {}
}
const valrs = paramsValidate(o, ['idCard','id'])
console.log(valrs)

运行结果:

Map(6) {
  [ 'age' ] => undefined,
  [ 'school' ] => null,
  [ 'idCard', 'img' ] => '',
  [ 'id' ] => '',
  [ 'arr' ] => [],
  [ 't' ] => {}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值