Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

I'm receiving an array of object in the API response and is nested array. i want find a object by ID

Hi Here is an array of object receiving from the API response and i'm using angular.js and javascript and i want get object with find by id and id is "1_1_1".is this possible? i'm stuck on it. please help.

[
      {
        "text": "folder 1",
        "parent": {
          "id": "1",
          "name": "folder 1"
        },
        "children": [
          {
            "text": "folder 1_1",
            "parent": {
              "id": "1_1",
              "name": "folder 1_1"
            },
            "children": [
              {
                "text": "folder 1_1_1",
                "parent": {
                  "id": "1_1_1",
                  "name": "folder 1_1_1"
                },
                "children": []
              },
              {
                "text": "folder 1_1_2",
                "parent": {
                  "id": "1_1_2",
                  "name": "folder 1_1_2"
                },
                "children": []
              }
            ]
          },
          {
            "text": "folder 1_2",
            "parent": {
              "id": "1_2",
              "name": "folder 1_2"
            },
            "children": [
              {
                "text": "folder 1_2_1",
                "parent": {
                  "id": "1_2_1",
                  "name": "folder 1_2_1"
                },
                "children": []
              }
            ]
          }
        ]
      },
      {
        "text": "folder 2",
        "parent": {
          "id": "2",
          "name": "folder 2"
        },
        "children": [
          {
            "text" : "folder 2_1",
            "parent": {
              "id": "2_1",
              "name": "folder 2_1"
            },
            "children": []
          },
          {
            "text" : "folder 2_2",
            "parent": {
              "id": "2_2",
              "name": "folder 2_2"
            },
            "children": []
          },
          {
            "text" : "folder 2_3",
            "parent": {
              "id": "2_3",
              "name": "folder 2_3"
            },
            "children": [
              {
                "text" : "folder 2_3_1",
                "parent": {
                  "id": "2_3_1",
                  "name": "folder 2_3_1"
                },
                "children": []
              }
            ]
          },
        ]
      },
      {
       "text": "folder 3",
       "parent": {
         "id": "3",
         "name": "folder 3"
       },
       "children": []
     }
    ]
like image 435
Haider Ali Avatar asked Nov 09 '22 03:11

Haider Ali


1 Answers

Try this:

function isMatch(element, criteria) {
    var parent = null;
    if (typeof element.parent !== 'undefined') {
        parent = element.parent;
        if (typeof parent.id !== 'undefined') {
            return (parent.id === criteria);
        }
    }
    return false;
}

function findById (tree, criteria) {

    for (var i = 0; i < tree.length; i = i + 1) {
        var obj = tree[i];
        if (isMatch(obj, criteria)) {
            return obj;
        };

        if (typeof obj.children !== 'undefined') {
            var foundElement = findById(obj.children, criteria);
            if (foundElement != null) {
                return foundElement;
            }
        }
    }

    return null;
}
like image 77
Lars Juel Jensen Avatar answered Nov 14 '22 23:11

Lars Juel Jensen