Javascript 如何查找字符串是否出现在对象中的任何位置?
我有几个东西。它们有许多不同的结构。例如:Javascript 如何查找字符串是否出现在对象中的任何位置?,javascript,loops,object,search,find,Javascript,Loops,Object,Search,Find,我有几个东西。它们有许多不同的结构。例如: var obj1 = { 'key1':'value', 'key2':[{ 'somekey':'somevalue', 'nestedObject': [{ 'something':'{{THIS STRING}}' }] }] } var obj2 = { 'key5':'some text {{THIS STRING}} some more text',
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}},无论它出现在对象中的什么位置,也不管它周围有什么其他文本。我只需要知道它是否出现在任何给定对象的值中的任何位置,不管它嵌套在对象中有多深
谢谢大家! 注意:这确实是一种快速的方法,但并不适用于所有用例。e、 g.如果您的键可能包含所需的字符串,这将给出错误的输出。请参阅下面的评论。 虽然不是最干净的解决方案,但您可以使用
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.stringify应该很简单。但是您还没有真正告诉我们有关对象结构或它可能包含的内容的任何信息。simple tree walkerIt应该是一个简单的递归函数。循环所有属性。如果是字符串,如果包含搜索字符串,则返回true。如果它是一个对象,则递归调用该函数,如果返回true,则返回
true
。如果到达循环的末尾,则返回false。这也会在键中找到字符串,而不仅仅是值。如果字符串包含任何需要在JSON中转义的字符,那么它也将不起作用。我知道这在所有情况下都不起作用。但是,如果OP有一个非常特定的用例(例如,如果它们的字符串不作为键出现),这可能是一种快速的方法。不干净,但很快。在我的特定情况下,字符串将始终位于值中(而不是键),并且始终是由{{}包围的字符串(例如,“{some string}”)