0

I've the following JSON:

"params": [
            {
              "name": "a",
              "value": "tes",
              "isAttr": false,
              "children": [
                {
                  "name": "b",
                  "value": "b",
                  "isAttr": false,
                  "uid": "0.529892839025706",
                  "parent_uid": "0.8096382778603584",
                  "children": [],
                  "expanded": true,
                  "level": 2
                }
              ],
              "uid": "0.8096382778603584",
              "expanded": true,
              "level": 1
            },
            {
              "name": "c",
              "value": "c",
              "isAttr": false,
              "children": [
                {
                  "name": "d",
                  "value": "d",
                  "isAttr": false,
                  "children": [
                    {
                      "name": "e",
                      "value": "e",
                      "isAttr": false,
                      "children": [
                        {
                          "name": "f",
                          "value": "f",
                          "isAttr": false,
                          "uid": "0.5153285339474678",
                          "parent_uid": "0.646890748757869",
                          "children": [],
                          "expanded": false,
                          "level": 4
                        }
                      ],
                      "uid": "0.646890748757869",
                      "parent_uid": "0.2041493458673358",
                      "expanded": false,
                      "level": 3
                    }
                  ],
                  "uid": "0.2041493458673358",
                  "parent_uid": "0.9416675802785903",
                  "expanded": true,
                  "level": 2
                },
                {
                  "name": "g",
                  "value": "g",
                  "isAttr": false,
                  "children": [
                    {
                      "name": "h",
                      "value": "h",
                      "isAttr": false,
                      "uid": "0.3920950344763696",
                      "parent_uid": "0.6195112708956003",
                      "children": [],
                      "expanded": false,
                      "level": 3
                    }
                  ],
                  "uid": "0.6195112708956003",
                  "parent_uid": "0.9416675802785903",
                  "expanded": true,
                  "level": 2
                },
                {
                  "name": "i",
                  "value": "i",
                  "isAttr": false,
                  "children": [
                    {
                      "name": "j",
                      "value": "j",
                      "isAttr": false,
                      "children": [
                        {
                          "name": "k",
                          "value": "k",
                          "isAttr": false,
                          "children": [
                            {
                              "name": "l",
                              "value": "l",
                              "isAttr": false,
                              "uid": "0.009914681548252702",
                              "parent_uid": "0.68887914926745",
                              "children": [],
                              "expanded": false,
                              "level": 5
                            }
                          ],
                          "uid": "0.68887914926745",
                          "parent_uid": "0.8186752030160278",
                          "expanded": false,
                          "level": 4
                        }
                      ],
                      "uid": "0.8186752030160278",
                      "parent_uid": "0.8304482696112245",
                      "expanded": false,
                      "level": 3
                    },
                    {
                      "name": "m",
                      "value": "m",
                      "isAttr": false,
                      "children": [
                        {
                          "name": "n",
                          "value": "n",
                          "isAttr": false,
                          "uid": "0.25650549842976034",
                          "parent_uid": "0.14876524219289422",
                          "children": [],
                          "expanded": false,
                          "level": 4
                        }
                      ],
                      "uid": "0.14876524219289422",
                      "parent_uid": "0.8304482696112245",
                      "expanded": false,
                      "level": 3
                    }
                  ],
                  "uid": "0.8304482696112245",
                  "parent_uid": "0.9416675802785903",
                  "expanded": true,
                  "level": 2
                }
              ],
              "uid": "0.9416675802785903",
              "expanded": true,
              "level": 1
            }
          ]

I need a method that receive uid with the params and return the the specific item in the params with him parent. I did the following, but sometimes I got null in the found:

    var findItem = function(params, uid){
        if (!params)
            return null;

        for(var i = 0; i < params.length; i++){
            if(params[i].uid == uid)
                return params[i];
            else{

                findItem(params[i].children, uid);
            }
        }

        return null;
    }

example for getting null: passing uid for the b

2
  • 1
    Maybe there should be return findItem(params[i].children, uid); (you're missing the return)? EDIT: This is not exactly correct, please see my answer. Commented Apr 24, 2014 at 8:45
  • Thank you man, yes I forget return Commented Apr 24, 2014 at 8:46

2 Answers 2

1

When You examine the children, You should check if You found something:

else {

    var found = findItem(params[i].children, uid);
    if (found !== null)
        return found;
}
Sign up to request clarification or add additional context in comments.

Comments

0
var findItem = function(params, uid){
    if (!params)
        return null;
    var res;
    for(var i = 0; i < params.length; i++){
        if(params[i].uid == uid)
            return params[i];
        else{
            res=findItem(params[i].children, uid);
        }
        if(res!=null) break;
    }
    return res;
};



findItem(params,"0.25650549842976034");

note that return in "for" loop cause breaking from loop, and also you should handle a result from recursive call (findItem(params[i].children, uid))

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.