按对象键值搜索多级javascript数组

按对象键值搜索多级javascript数组,javascript,Javascript,我有这个obj var myObj = { "sections": [{ "id": "s1", "name": "my section no.1", "sheets": [{ "id": "sheet1", "questions": [{ "id": "q1", "name": "my q",

我有这个obj

  var myObj =   {
    "sections": [{
        "id": "s1",
        "name": "my section no.1",
        "sheets": [{
            "id": "sheet1",
            "questions": [{
                "id": "q1",
                "name": "my q",
                "options": [{
                    "id": "o1",
                    "order_no": 1,
                    "name": "option 1"
                }, {
                    "id": "o2",
                    "name": "option 2"
                }]
            }]
        }]
    }]
};
我希望函数按id搜索此数组 所以 searchById(“o1”)应返回

{"id": "o1","order_no": 1,"name": "option 1"}
和searchById(“q1”)应返回

{
    "id": "q1",
    "name": "my q",
    "options": [{
        "id": "o1",
        "order_no": 1,
        "name": "option 1"
    }, {
        "id": "o2",
        "name": "option 2"
    }]
}

请帮助我

您拥有的是对象,您可以在循环中使用for…创建递归函数以返回结果

var obj={
“章节”:[{
“id”:“s1”,
“名称”:“我的第一节”,
“工作表”:[{
“id”:“sheet1”,
“问题”:[{
“id”:“q1”,
“姓名”:“我的q”,
“选择”:[{
“id”:“o1”,
“订单号”:1,
“名称”:“选项1”
}, {
“id”:“o2”,
“名称”:“选项2”
}]
}]
}]
}]
}
函数findObj(数据,id){
用于(数据中的var i){
如果(i='id'&&data[i]==id)返回数据
if(数据类型[i]=“对象”&&findObj(数据[i],id))返回findObj(数据[i],id)
}
}
log(findObj(obj,'o1'))

log(findObj(obj,'q1'))
您拥有的是对象,您可以在循环中为…创建递归函数以返回结果

var obj={
“章节”:[{
“id”:“s1”,
“名称”:“我的第一节”,
“工作表”:[{
“id”:“sheet1”,
“问题”:[{
“id”:“q1”,
“姓名”:“我的q”,
“选择”:[{
“id”:“o1”,
“订单号”:1,
“名称”:“选项1”
}, {
“id”:“o2”,
“名称”:“选项2”
}]
}]
}]
}]
}
函数findObj(数据,id){
用于(数据中的var i){
如果(i='id'&&data[i]==id)返回数据
if(数据类型[i]=“对象”&&findObj(数据[i],id))返回findObj(数据[i],id)
}
}
log(findObj(obj,'o1'))
console.log(findObj(obj,'q1'))
函数findID(id,object){
让_temp;
//验证是否为阵列
if(数组的对象实例){
//通过递归扫描所有对象
for(设i=0;i
函数findID(id,对象){
让_temp;
//验证是否为阵列
if(数组的对象实例){
//通过递归扫描所有对象
for(设i=0;i
你能解释一下吗?你能解释一下吗?你的函数没有迭代所有的键,所以我发布了新的答案find it out no我在第二个if子句中添加了一个条件
if(typeof data[i]=“object”&&findObj(data[i],id))
这是干什么的?另外,您能否提供我的代码失败的数据示例,以便我可以修复它?该函数将在Objects之后跳过任何键。您的函数没有迭代所有键,因此我发布了新答案find it Out No我在第二个if子句中添加了一个条件
if(数据类型[i]='object'&&findObj(数据[i],id))
这是做什么的?另外,您能否提供我的代码失败的数据示例,以便我可以修复它?该函数将跳过对象之后的任何键
 myArray =    {
    "sections": [{
        "id": "s1",
        "name": "my section no.1",
        "sheets": [{
            "id": "sheet1",
            "questions": [{
                "id": "q1",
                "name": "my q",
                "options": [{
                    "id": "o1",
                    "order_no": 1,
                    "name": "option 1"
                }, {
                    "id": "o2",
                    "name": "option 2"
                }]
            }]
        }]
    }]
}


 myArray = JSON.parse(myArray).sections;
   function getMeObjById(criteria) {
     var myObj = myArray.filter(funcion(obj){
      if(obj.id !== 'undefined' && obj.id === criteria){
       return true;
      }
     });
     return myObj; // or return myObj[0] if id are unique
    }
function findID(id, object){
    let _temp;
    // Verify if is Array
    if(object instanceof Array){
        // Scan all objects by doing recursion
        for(let i = 0; i < object.length; i++){
            if((_temp = findID(id, object[i]))){
                return _temp;
            }
        }
    }   

    // Verify if is Object
    if(object instanceof Object){
        // Verify if is the Object ID
        if(object.id && object.id === id){
            return object;
        }
        // Scan all objects by doing recursion
        for(index in object){
            if(object[index] instanceof Object || object[index] instanceof Array){
                if((_temp = findID(id, object[index]))){
                    return _temp;
                }
            }   
        }
    }
}