在一个复杂的对象或者数组里面查找是否包含某一个值,在面试的过程中经常会被问到
看到这个问题,第一时间想到的就是递归,
我们先来看一个对象:
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)