const obj = {
B:0,
A:{
C:'',
D:{
F:''
}
}
}
const attrs = [
'C','A.B','A.C','A.C.D.F'
]
复制代码
需求
给定符合层次节构的key值字符串,判断对象中是否存在该属性 例:‘A.B.C’则是判断对象中是否存在A属性、A属性中是否存在B属性、B属性中是否存在C属性。
hasOwnProperty
hasOwnProperty
可以用来判断自身是否存在某个属性,但这仅限节构层次比计较浅的对象。如果是要判断深层次节构的属性时就不行了
实现思路
例‘A.B.C’,先判断对象中是否存在A,若存在则继续判断下一层,以此类推。如无A,那么也就不用判断下一层了
需要注意的地方是,我们只是判断是否存在这个属性,不能被属性值影响,例若C:false,那么结果也为true
实现代码
function keysCheck (obj, attrs) {
try {
attrs.forEach((item) => {
let objKeys = Object.keys(obj)
let objCopy = obj
const attrItemList = item.split('.')
for (let y = 0; y < attrItemList.length; y++) {
if (y == attrItemList.length - 1) {
if (objKeys.includes(attrItemList[y])) throw new Error(item)
}
objCopy = objCopy[attrItemList[y]]
if (!objCopy) break
objKeys = Object.keys(objCopy)
}
})
} catch (error) {
return true
}
return false
}
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END