查找一个复杂对象或数组里面是否包含某一个值

在一个复杂的对象或者数组里面查找是否包含某一个值,在面试的过程中经常会被问到

看到这个问题,第一时间想到的就是递归,

我们先来看一个对象:

let obj = {
    age: 30,
    name: '彭于晏',
    hobby: ['运动', '唱歌', '游泳', {
        bane: '122e',
        nasd: {
            asdn: {
                adsa: {
                    size: 12
                }
            }
        }
    }],
    app: {
       names: 'wangxiaoj'
    }
}

这是一个嵌套多层的对象,里面还包含有数组

start:

首先我们来写一个函数:

当值传进的时候,我们首先判断这个值是否是对象或者是数组

function objDeep(params ={}){
    if(typeof params !== 'object' ||typeof params === null){
        return params
    }

}

 然后遍历整个对象:

  for (let i in params){
        if (params[i] === 12){ // 当便利的对象 等于我们想查询的值 ,就打印输出并返回
            console.log('成功', params);
            return
        // 如果不等于 且 遍历的还是一个对象或者一个数组,我们就进行递归
        }else if(params[i] instanceof Array || params[i] instanceof Object){
            aa(params[i])
        }
    }

完整代码:

function objDeep(params ={}){
    if(typeof params !== 'object' ||typeof params === null){
        return params
    }

    for (let i in params){
        if (params[i] === 12){
            console.log('成功', params);
            return
        }else if(params[i] instanceof Array || params[i] instanceof Object){
            objDeep(params[i])
        }
    }

}

let obj = {
    age: 30,
    name: '彭',
    hobby: ['运动', '唱歌', '游泳', {
        bane: '122e',
        nasd: {
            asdn: {
                adsa: {
                    size: 12
                }
            }
        }
    }],
    app: {
        names: 'wangxiaoj'
    }
}

objDeep(obj)

猜你喜欢

转载自blog.csdn.net/Cat_LIKE_Mouse/article/details/125635613