工作中经常遇到多层对象中查找是否包含需要key或者value的问题,通过手写循环语句,虽然可以解决问题,但是如何快速优雅地解决呢?
基本思路是先从第一层数据查找,如何发现里面包含对象,进去继续查找,直到找到为止。
建议使用递归的方法,以减少编程量,但是使用递归法时,条件必须写好,要不好容易会进入死循环,我有一次试过,直接将CPU全部占完,电脑无法动弹。
写法参考:
function findObjValue (key, value, data) {
if (typeof(data) != 'object') return {successful: false, msg: 'data not object'}
if (!data) return {successful: false, msg: 'data is null'}
return findValue (key, value, data)
}
function findValue (key, value, obj) {
let rets = {successful: false, msg: 'can not find data'}
for (let i in obj) {
if (key && key == i && !value) {
rets = {successful: true, msg: {key: i, value: obj[i], obj: obj}}
break
}
if (value && value == obj[i] && !key) {
rets = {successful: true, msg: {key: i, value: obj[i], obj: obj}}
break
}
if (value && key && key == i && value == obj[i]) {
rets = {successful: true, msg: {key: i, value: obj[i], obj: obj}}
break
}
if (typeof(obj[i]) == 'object') {
const fv = findValue (key, value, obj[i])
if (fv.successful) {
rets = fv
break
}
}
}
return rets
}