Javascript 查找具有特定值的对象

Javascript 查找具有特定值的对象,javascript,object,Javascript,Object,我有一个树结构的对象,例如 var x = [{ id: 1, children: [{ id: 11, children: [], }, { id: 12, children: [{ id: 121, name:'jogn', children: [] }] }] }, { id: 2, children: [], }] 我想在其中找到具有特定ID的对象。我做了 function printO

我有一个树结构的对象,例如

var x = [{
  id: 1,
  children: [{
    id: 11,
    children: [],
  }, {
    id: 12,
    children: [{
      id: 121,
      name:'jogn',
      children: []
    }]
  }]
}, {
  id: 2,
  children: [],
}]
我想在其中找到具有特定ID的对象。我做了

function printObj(obj , val) {
  for( var i = 0; i < obj.length ; i++){
         if( obj[i].id == val){
         return obj[i];
         }
         if( obj[i].children.length > 0 ){
            printObj( obj[i].children)
         }
    }
}

当我弹出一些警报时,它返回undefined而不是jogn Altound,如果它找到了设置值,它就会找到它。为什么它返回了错误的对象?

这行有两个问题:

printObj( obj[i].children);
  • 它缺少了第二个论点

  • 如果找到结果,则需要返回结果

  • 所以

    另外,在您的测试中,您在您想要的
    g.name
    位置查找
    x.name

    固定的:

    var x=[{
    id:1,
    儿童:[{
    id:11,
    儿童:[],
    }, {
    id:12,
    儿童:[{
    id:121,
    名称:“jogn”,
    儿童:[]
    }]
    }]
    }, {
    id:2,
    儿童:[],
    }];
    函数printObj(obj,val){
    对于(变量i=0;i0){
    var possibleResult=printObj(obj[i].子对象,val);
    如果(可能结果){
    返回可能结果;
    }
    }
    }
    }
    var g=printObj(x,121);
    
    console.log(g.name)此行有两个问题:

    printObj( obj[i].children);
    
  • 它缺少了第二个论点

  • 如果找到结果,则需要返回结果

  • 所以

    另外,在您的测试中,您在您想要的
    g.name
    位置查找
    x.name

    固定的:

    var x=[{
    id:1,
    儿童:[{
    id:11,
    儿童:[],
    }, {
    id:12,
    儿童:[{
    id:121,
    名称:“jogn”,
    儿童:[]
    }]
    }]
    }, {
    id:2,
    儿童:[],
    }];
    函数printObj(obj,val){
    对于(变量i=0;i0){
    var possibleResult=printObj(obj[i].子对象,val);
    如果(可能结果){
    返回可能结果;
    }
    }
    }
    }
    var g=printObj(x,121);
    console.log(g.name)对于函数方法中的对象和列表工作非常有用-下面是您遍历的数据-

    var x = [{ id: 1, children: [{ id: 11, children: [], }, { id: 12, children: [{ id: 121, name: 'jogn', children: [] }] }] }, { id: 2, children: [], }] const findById = (id, list) => map(o => { if(o.id === id) return o return findById(id, o.children) }, list) head(flatten(findById(121, x))) 变量x=[{ id:1, 儿童:[{ id:11, 儿童:[], }, { id:12, 儿童:[{ id:121, 名称:“jogn”, 儿童:[] }] }] }, { id:2, 儿童:[], }] const findById=(id,list)=>map(o=>{ 如果(o.id==id)返回o 返回findById(id,o.children) },列表) 头部(展平(findById(121,x))) 对于从函数方法进行对象和列表工作来说,这是一个很好的选择——下面是您所遍历的数据-

    var x = [{ id: 1, children: [{ id: 11, children: [], }, { id: 12, children: [{ id: 121, name: 'jogn', children: [] }] }] }, { id: 2, children: [], }] const findById = (id, list) => map(o => { if(o.id === id) return o return findById(id, o.children) }, list) head(flatten(findById(121, x))) 变量x=[{ id:1, 儿童:[{ id:11, 儿童:[], }, { id:12, 儿童:[{ id:121, 名称:“jogn”, 儿童:[] }] }] }, { id:2, 儿童:[], }] const findById=(id,list)=>map(o=>{ 如果(o.id==id)返回o 返回findById(id,o.children) },列表) 头部(展平(findById(121,x)))
    如果您提醒
    g.name
    而不是
    x
    ,会怎么样?另外,您不会从printObj(子对象)返回任何内容,因此递归结果将消失。如果您提醒
    g.name
    而不是
    x
    ,会怎么样?此外,您不会从printObj(子对象)返回任何内容,因此递归结果将消失。