深层次判断对象内是否有该属性

     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
喜欢就支持一下吧
点赞0 分享