NuclearDispersionSystem/ant-design-vue-jeecg/node_modules/xe-utils/methods/base/has.js
2023-09-14 14:47:11 +08:00

63 lines
1.5 KiB
Java

var staticHGKeyRE = require('../static/staticHGKeyRE')
var helperGetHGSKeys = require('./helperGetHGSKeys')
var hasOwnProp = require('./hasOwnProp')
/**
* 检查键、路径是否是该对象的属性
*
* @param {Object/Array} data 对象
* @param {String/Function} property 键、路径
* @return {Boolean}
*/
function has (obj, property) {
if (obj) {
if (hasOwnProp(obj, property)) {
return true
} else {
var prop, arrIndex, objProp, matchs, rest, isHas
var props = helperGetHGSKeys(property)
var index = 0
var len = props.length
for (rest = obj; index < len; index++) {
isHas = false
prop = props[index]
matchs = prop ? prop.match(staticHGKeyRE) : ''
if (matchs) {
arrIndex = matchs[1]
objProp = matchs[2]
if (arrIndex) {
if (rest[arrIndex]) {
if (hasOwnProp(rest[arrIndex], objProp)) {
isHas = true
rest = rest[arrIndex][objProp]
}
}
} else {
if (hasOwnProp(rest, objProp)) {
isHas = true
rest = rest[objProp]
}
}
} else {
if (hasOwnProp(rest, prop)) {
isHas = true
rest = rest[prop]
}
}
if (isHas) {
if (index === len - 1) {
return true
}
} else {
break
}
}
}
}
return false
}
module.exports = has