【问题标题】:How to find if a string appears anywhere in an object?如何查找字符串是否出现在对象中的任何位置?
【发布时间】:2019-11-01 19:26:16
【问题描述】:

我有几个对象。它们的结构有很多不同的方式。例如:

var obj1 = {
  'key1':'value',
  'key2':[{
     'somekey':'somevalue',
     'nestedObject': [{
        'something':'{{THIS STRING}}'
      }]
   }]
 }

var obj2 = {
      'key5':'some text {{THIS STRING}} some more text',
      'name':[{
         'somekey':'somevalue'
       }]
     }

还有比这更多的对象,它们的结构可以无限不同。

我正在寻找一种方法来查找 {{THIS STRING}},无论它出现在对象中的什么位置,也无论它周围有什么其他文本。我只需要知道它是否出现在任何给定对象的值中的任何位置的真/假,无论它在对象中的嵌套程度如何。

谢谢!

【问题讨论】:

  • 也发布您尝试过的内容。
  • 我的意思是......如果它是一个简单的对象(只包含对象/数组/基元,没有自引用)json.stringify 应该很容易。但是您并没有真正告诉我们有关对象结构或它可能包含什么的任何信息。
  • 简单的树行者
  • 应该是一个简单的递归函数。循环遍历所有属性。如果它是一个字符串,如果它包含搜索字符串,则返回 true。如果它是一个对象,则递归调用该函数,如果它返回true,则返回true。如果到达循环的末尾,则返回 false。

标签: javascript loops object search find


【解决方案1】:

注意:这确实是一种快速的方法,但它并不适用于所有用例。例如如果您的键可能包含所需的字符串,这将给出错误的输出。请参阅下面的 cmets。

不是最简洁的解决方案,但您可以使用 JSON.stringify() 将对象转换为 JSON 字符串,然后在该字符串中查找您想要的字符串。

var obj1_str = JSON.stringify(obj1);
var isInFile = obj1_str.includes("your_string"); //true if your string is there, false otherwise.

【讨论】:

  • 这也会在键中找到字符串,而不仅仅是值。
  • 如果字符串包含任何需要在 JSON 中转义的字符,它也将不起作用。
  • 好吧,我知道这不会在所有情况下都有效。但是,如果 OP 有一个非常具体的用例(例如,如果他们的字符串不作为键出现),这可能是一种快速的方法。不干净,但很快。
  • 在我的具体情况下,字符串总是在一个值中(从不是一个键),并且总是一个被 {{ }} 包围的字符串(所以,“{{some string}}” ,例如)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-21
  • 1970-01-01
  • 1970-01-01
  • 2017-11-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多