一般取对象某个属性要这么写,以防中间某个属性报错
obj && obj.a && obj.a.b && obj.a.b.c
下面写了个方法,对空属性做了判空
function getValue(data, keysString) {
if(!data){
return undefined
}
if(!keysString){
return data
}
// [0],[1]... 属性是数组,只可以一层:obj[0],不可以多层:obj[0][0]
let reg = /\[[0-9]+\]/g
let keys = keysString.split('.')
for(let key of keys) {
if(key.match(reg)){
// 包含数组
var ArrKey = key.replace(reg,'')
var ArrIndex = key.replace(ArrKey,'').replace(/\[/,'').replace(/\]/,'')
if(data[ArrKey] === undefined) {
return undefined
} else if(data[ArrKey][ArrIndex] === undefined) {
return undefined
} else {
data = data[ArrKey][ArrIndex]
}
} else {
// 对象
if(data[key] === undefined) {
return undefined
} else {
data = data[key]
}
}
}
return data
}
let obj = {
a:{
b1:{
c1:{
d1:'111'
}
},
b2:[
{
c1:{
d1:{
e1:'222'
}
}
},
{
c2:{
d1:'333'
}
}
]
}
}
getValue(obj,'a.b1.c1.d1') // '111'
getValue(obj,'a.b2[1].c2.d1') // '333'
getValue(obj,'a.b2[1].c3.d1') // undefined