Javascript在JSON对象中递归查找

Javascript在JSON对象中递归查找,javascript,json,Javascript,Json,我有以下数组: c = ['foo', 'bar']; 和一个物体 this.foobar = {"foo":{"bar":123}}; 如何在JSON对象中搜索数组中的每个元素。它需要是递归的。一个包含我正在尝试执行的任务数组的PHP版本可以大致如下: function in_array_recursive($needle, $haystack) { if(in_array($needle, $haystack)) return true; forea

我有以下数组:

c = ['foo', 'bar'];
和一个物体

this.foobar = {"foo":{"bar":123}};
如何在JSON对象中搜索数组中的每个元素。它需要是递归的。一个包含我正在尝试执行的任务数组的PHP版本可以大致如下:

function in_array_recursive($needle, $haystack) { 
    if(in_array($needle, $haystack)) 
        return true; 
    foreach($haystack as $elem) 
        if(is_array($elem) && in_array_recursive($needle, $elem) 
            return true; 
    return false; 
}  

然而,我需要做的是相同的,但在JavaScript中,而不是数组中,我需要使用JSON。

您可以执行如下操作,查找匹配的键

var foobar = {
    "foo": {
        "whooop" : {
        "bar" : 123
        }
    }
};

function isInArray(needle, haystack) { 
    var foundNeedle = false;

    for (var key in haystack) {

        if (isInArray(needle, haystack[key])) {
            foundNeedle = true;
        }

        if (key == needle) {
            foundNeedle = true
        }
    }

    return foundNeedle;    
}  

var message = "is bar in foobar? result is... " +  isInArray("bar", foobar));

您可以执行如下操作,查找与指针匹配的键

var foobar = {
    "foo": {
        "whooop" : {
        "bar" : 123
        }
    }
};

function isInArray(needle, haystack) { 
    var foundNeedle = false;

    for (var key in haystack) {

        if (isInArray(needle, haystack[key])) {
            foundNeedle = true;
        }

        if (key == needle) {
            foundNeedle = true
        }
    }

    return foundNeedle;    
}  

var message = "is bar in foobar? result is... " +  isInArray("bar", foobar));

JSON只是一个元素数组(或者元素数组,等等)?还是一个物体?如果是一个对象,您需要告诉我们更多信息,也许可以提供一些您想要实现的示例(您需要基于键或基于值的搜索吗?)您需要真/假还是希望返回值?还是钥匙?在递归上下文中,键可能采用键数组的形式。您是在寻找一个值,还是多个值?如果您解释一下您试图解决的问题,可能会有所帮助。JSON是否只是元素数组(或元素数组,等等)?还是一个物体?如果是一个对象,您需要告诉我们更多信息,也许可以提供一些您想要实现的示例(您需要基于键或基于值的搜索吗?)您需要真/假还是希望返回值?还是钥匙?在递归上下文中,键可能采用键数组的形式。您是在寻找一个值,还是多个值?如果您解释一下您试图解决的问题,可能会有所帮助。请注意,@Steven将此作为如何在Javascript中递归的示例,而不是提供您需要的代码。在将其应用于通用JSON对象之前,需要进行一些调整。例如,对包含字符串值的对象运行上面的代码,例如,
isInArray(“bar”,“foo:{bar”})
将导致无限递归(因为您可以循环字符串)并破坏调用堆栈。好的一点是,您必须使用类似“if”(typeof haystack[key]=“object”)的内容来防止这种情况发生{if(isInArray(needle,haystack[key]){foundNeedle=true;}}}因为我假设您只想检查匹配的键,而不是匹配的值
isInArray(“bar”,{foo:bar})
将返回false。请注意,@Steven将此作为如何在Javascript中递归的示例,而不是提供所需的代码。在将其应用于通用JSON对象之前,您需要进行一些调整。例如,对包含字符串值的对象运行上述代码,例如,
isInArray(“bar”,{foo:“bar”})
将导致无限递归(因为您可以在字符串上循环)并破坏调用堆栈。好的一点是,您必须使用类似于'if(typeof haystack[key]=“object”){if(isInArray(needle,haystack[key]){foundNeedle=true;}的内容来防止这种情况发生`而且,因为我假设您只想检查匹配的键,而不是匹配的值
isInArray(“bar”,{foo:“bar”})
将返回false。