【问题标题】:Check if a text exists in a value in deep nested object? [duplicate]检查深层嵌套对象的值中是否存在文本? [复制]
【发布时间】:2016-12-20 14:08:19
【问题描述】:

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

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

【问题讨论】:

  • 递归是可能的。
  • 最简单的方法是递归函数,它在每个可迭代的子对象上调用自身,并检查任何字符串。我认为没有内置的。
  • 您希望where 成为子字符串吗?
  • 这可能会有所帮助:stackoverflow.com/questions/15523514/…
  • 可以where 成为价值的一部分,成为关键,关键的一部分,???

标签: javascript object


【解决方案1】:

您可以使用下面的recursive function 来遍历键并检查类型。如果类型为objectarray,则调用递归检查。

工作sn-p

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

【讨论】:

    猜你喜欢
    • 2013-11-28
    • 2021-12-23
    • 1970-01-01
    • 2018-12-23
    • 2019-04-08
    • 1970-01-01
    • 2011-10-19
    • 2021-11-16
    • 2016-03-01
    相关资源
    最近更新 更多