递归判断JS对象内所有属性值是否为空,并返回空值的key和value
文章目录 递归判断JS对象内所有属性值是否为空,并返回空值的key和value
代码
const paramsValidate = ( obj: any , ... roles: Array < Array < string >> ) => { let currentKey: Array < string > = [ ] let unValidateKeyArr: Map< Array < string > , string > = new Map ( ) 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' ] => { }
}