在Javascript对象中搜索特定ID的位置?

在Javascript对象中搜索特定ID的位置?,javascript,Javascript,我有一个Javascript对象,有很多不同的部分。如何搜索所有部分以查找特定ID的位置?我正在搜索的ID不在特定位置,可以位于任何树分支中 例如,我正在搜索此ID: xobmnbjxg0g_1527269346261 var app = { "structure": [ { "id": "0", "type":"IF", "parameters": [ {

我有一个Javascript对象,有很多不同的部分。如何搜索所有部分以查找特定ID的位置?我正在搜索的ID不在特定位置,可以位于任何树分支中

例如,我正在搜索此ID:

xobmnbjxg0g_1527269346261
var app = {
    "structure": [
        {
            "id": "0",
            "type":"IF",
            "parameters": [
                {
                    "id": "xobmnbjxg0g_1527269346260",
                    "type": "field",
                    "value": "CV_TEST_SPOT1X"
                },
                {
                    "id": "2",
                    "type": "operator",
                    "value": "="
                },
                {
                    "id": "3",
                    "type": "field",
                    "value": "North America"
                }
            ],
            "if-children": [
                {
                    "id": "xobmnbjxg0g_1527269346261",
                    "type":"IF",
                    "parameters": [
                        {
                            "id": "1",
                            "type": "field",
                            "value": "CV_TEST_SPOT1"
                        },
                        {
                            "id": "2",
                            "type": "operator",
                            "value": "="
                        },
                        {
                            "id": "3",
                            "type": "field",
                            "value": "North America"
                        }
                    ],
                    "if-children":[


                    ],
                    "else-children":[


                    ]
                }
            ],
            "else-children":[
                {
                    "id": "xobmnbjxg0g_1527269346262",
                    "type":"IF",
                    "parameters": [
                        {
                            "id": "1",
                            "type": "field",
                            "value": "CV_TEST_SPOT1"
                        },
                        {
                            "id": "2",
                            "type": "operator",
                            "value": "="
                        },
                        {
                            "id": "3",
                            "type": "field",
                            "value": "North America"
                        }
                    ],
                    "if-children":[
                        {
                            "id":"xobmnbjxg0g_152726934626X"
                        }   
                    ],
                    "else-children":[
                        {
                            "id":"xobmnbjxg0g_152726934626Y"
                        }   

                    ]
                }
            ]

        },
        {
            "id": "xobmnbjxg0g_1527269346263",
            "type":"IF",
            "parameters": [
                [
                    {
                        "id": "1",
                        "type": "field",
                        "value": "CV_TEST_SPOT1"
                    }
                ]
            ],
            "if-children": [
                {
                    "id": "xobmnbjxg0g_1527269346264",
                    "type":"IF",
                    "parameters": [
                        [
                            {
                                "id": "1",
                                "type": "field",
                                "value": "CV_TEST_SPOT1"
                            }
                        ]
                    ],
                    "if-children":[
                        {
                            "id": "xobmnbjxg0g_1527269346265",
                            "type":"IF",
                            "parameters": [
                                {
                                    "id": "1",
                                    "type": "field",
                                    "value": "CV_TEST_SPOT1"
                                }
                            ],
                            "if-children":[
                                {
                                    "id":"xobmnbjxg0g_1527269346266"
                                }
                            ],
                            "else-children":[
                                {
                                    "id":"xobmnbjxg0g_1527269346267"
                                }                           
                            ]
                        }
                    ],
                    "else-children":[
                        {
                            "id":"xobmnbjxg0g_1527269346268"
                        }                   
                    ]
                }
            ],
            "else-children":[
                {
                    "id":"xobmnbjxg0g_1527269346269"
                }           
            ]

        }
    ]
};
我正试图输出该ID的位置,即:

app['structure'][0]['if-children'][0]['id']
我的Javascript对象:

xobmnbjxg0g_1527269346261
var app = {
    "structure": [
        {
            "id": "0",
            "type":"IF",
            "parameters": [
                {
                    "id": "xobmnbjxg0g_1527269346260",
                    "type": "field",
                    "value": "CV_TEST_SPOT1X"
                },
                {
                    "id": "2",
                    "type": "operator",
                    "value": "="
                },
                {
                    "id": "3",
                    "type": "field",
                    "value": "North America"
                }
            ],
            "if-children": [
                {
                    "id": "xobmnbjxg0g_1527269346261",
                    "type":"IF",
                    "parameters": [
                        {
                            "id": "1",
                            "type": "field",
                            "value": "CV_TEST_SPOT1"
                        },
                        {
                            "id": "2",
                            "type": "operator",
                            "value": "="
                        },
                        {
                            "id": "3",
                            "type": "field",
                            "value": "North America"
                        }
                    ],
                    "if-children":[


                    ],
                    "else-children":[


                    ]
                }
            ],
            "else-children":[
                {
                    "id": "xobmnbjxg0g_1527269346262",
                    "type":"IF",
                    "parameters": [
                        {
                            "id": "1",
                            "type": "field",
                            "value": "CV_TEST_SPOT1"
                        },
                        {
                            "id": "2",
                            "type": "operator",
                            "value": "="
                        },
                        {
                            "id": "3",
                            "type": "field",
                            "value": "North America"
                        }
                    ],
                    "if-children":[
                        {
                            "id":"xobmnbjxg0g_152726934626X"
                        }   
                    ],
                    "else-children":[
                        {
                            "id":"xobmnbjxg0g_152726934626Y"
                        }   

                    ]
                }
            ]

        },
        {
            "id": "xobmnbjxg0g_1527269346263",
            "type":"IF",
            "parameters": [
                [
                    {
                        "id": "1",
                        "type": "field",
                        "value": "CV_TEST_SPOT1"
                    }
                ]
            ],
            "if-children": [
                {
                    "id": "xobmnbjxg0g_1527269346264",
                    "type":"IF",
                    "parameters": [
                        [
                            {
                                "id": "1",
                                "type": "field",
                                "value": "CV_TEST_SPOT1"
                            }
                        ]
                    ],
                    "if-children":[
                        {
                            "id": "xobmnbjxg0g_1527269346265",
                            "type":"IF",
                            "parameters": [
                                {
                                    "id": "1",
                                    "type": "field",
                                    "value": "CV_TEST_SPOT1"
                                }
                            ],
                            "if-children":[
                                {
                                    "id":"xobmnbjxg0g_1527269346266"
                                }
                            ],
                            "else-children":[
                                {
                                    "id":"xobmnbjxg0g_1527269346267"
                                }                           
                            ]
                        }
                    ],
                    "else-children":[
                        {
                            "id":"xobmnbjxg0g_1527269346268"
                        }                   
                    ]
                }
            ],
            "else-children":[
                {
                    "id":"xobmnbjxg0g_1527269346269"
                }           
            ]

        }
    ]
};

有趣的谜题/问题

很确定我遗漏了一些边缘案例,但这似乎通过了一些测试

function is(obj, type){
    return Object.prototype.toString.call(obj) === `[object ${type}]`;
}

function findPosition(obj, mykey, myval, res){
    if(is(obj, "Object")){
        if(mykey in obj && obj[mykey] === myval){
          res.tree.push(mykey);
          res.found = true;
        } else {
          for( let key in obj){
            if(res.found) break;
            res.tree.push(key);
            findPosition(obj[key], mykey, myval, res);
          }
          if(!res.found) res.tree.pop();
        }
    } else if(is(obj, "Array")){
        for(let i = 0; i < obj.length; i++){
            if(res.found) break;
            res.tree.push(i);
            findPosition(obj[i], mykey, myval, res);
        }
        if(!res.found) res.tree.pop();
    } else {
        res.tree.pop();
    }

    return res;
}

要查找您正在迭代的当前obj是否是
数组
,您也可以使用

注意:我知道这与实际问题无关,但问题中没有JSON。这是一个JS对象文本。JSON是一个字符串。已将JSON更改为JS对象。您正在查找DFS。感谢您的响应!这是一个难题,直到我累了才意识到它有多复杂。我试过你的代码,它在树数组中给了我89个变量,而它应该只有6个。不知道怎么了。使用此JS对象进行测试:@lol您正在尝试查找哪个id。这就是我用
xobmnbjxg0g_1527269346262测试得到的结果。lol看这个小提琴,它给了我一个正确的结果,我现在工作得很好!!!!!!!!非常感谢!!!!!!!!!!!!!!!!!!