Find an object in an array of deeply nested objects recursively

后端 未结 3 1116
梦毁少年i
梦毁少年i 2020-12-10 22:34

I have an array, and each item is an object with unique Ids. Some items may also have children, and it can have children array inside a children array. I\'m trying to pick a

3条回答
  •  青春惊慌失措
    2020-12-10 23:00

    Example using recursion.

    const data = [{
        uuid: '40E75F3DE56B4B11B3AFBDE46785737B'
      }, {
        uuid: '9CEF74766BBB4B9682B7817B43CEAE48'
      }, {
        uuid: '34F209A883D3406FBA6BACD9E07DB1D9',
        children: [{
          uuid: 'F429C51BF01C405DA517616E0E16DE4E',
          children: [{
            uuid: '8823CFCE7D4645C68991332091C1A05C'
          }, {
            uuid: '58A9345E881F48C980498C7FFB68667D'
          }]
        }]
      }, {
        uuid: '152488CC33434A8C9CACBC2E06A7E535'
      }, {
        uuid: '9152B3DEF40F414BBBC68CACE2F5F6E4'
      }, {
        uuid: 'B9A39766B17E4406864D785DB6893C3D'
      },
      {
        uuid: '3J4H4J5HN6K4344D785DBJ345HSSODF',
        children: [{
            uuid: 'EAB14DD72DA24BB88B4837C9D5276859'
          },
          {
            uuid: 'FFA80D043380481F8835859A0839512B'
          },
          {
            uuid: '9679687190354FA79EB9D1CA7B4962B1'
          }
        ]
      }
    ];
    
    let find = (data, uuid) => {
      for (let o of data) {
        if (o.uuid === uuid) {
          return o;
        };
        if ('children' in o) {
          let ro = find(o.children, uuid);
          if (ro) {
            return ro;
          }
        }
      }
    }
    
    let result = find(data, '9679687190354FA79EB9D1CA7B4962B1')
    console.clear();
    console.log(result);

提交回复
热议问题