检查深层嵌套对象的值中是否存在文本?

mjo*_*hko 1 javascript object

如何检查深度嵌套对象是否包含值?我想检查给定的对象是否包含例如包含“where”的属性值:

let data = {
    name: 'Somebody',
    address: {
        city: 'somewhere'
    },
    tags: [{
        id: 5
        name: 'new'
    }]
}
check(data, 'where') // should be true
Run Code Online (Sandbox Code Playgroud)

Aru*_*una 5

您可以使用recursive function下面的a来迭代键并检查类型。如果类型是objector array,它将调用递归检查。

工作片段

let data = {
    name: 'Somebody',
    address: {
        city: 'somewhere'
    },
    tags: [{
        id: 5,
        name: 'new'
    }]
};

const check = (obj, text) => {
  var exists = false;
  var keys = Object.keys(obj);
  for(var i = 0; i < keys.length; i++) {
    var key = keys[i];
    var type = typeof obj[key];
    if(type === 'object') {
      exists = check(obj[key], text);
    } else if(type === 'array') {
      
      for(var j = 0; j < obj[key].length; j++) {
        exists = check(obj[key][j], text);
    
        if(exists) {
          break;
        }
      }
      
    } else if(type === 'string') {
      exists = obj[key].indexOf(text) > -1;
    }
    
    if(exists) {
      break;
    }
  }
       
  return exists;
};

console.log(check(data, 'where')); // should be true
Run Code Online (Sandbox Code Playgroud)