递归判断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' ] => {}
}