如何优雅快速在多层对象中查找是否包含需要的key或者value

工作中经常遇到多层对象中查找是否包含需要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
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lcwai

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值