I get an array of the object in the API response and is a nested array. I want to find an object by ID

Hi. Here is an array of objects receiving an API response, and I use angular.js and javascript, and I want to get the object with find by id, and id is " 1_1_1 ". Is it 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": [] } ] 
+5
source share
2 answers

Try the following:

 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; } 
+1
source

There is no built-in function in JavaScript or Angular for this.

However, this is a problem that can be easily solved with recursion:

 function findById(id, items) { for (var i = 0; i < items.length; i++) { if (items[i].id === id) { return items[i]; } var result = findById(id, items[i].children); if (result !== null) { return result; } } return null; } 
0
source

Source: https://habr.com/ru/post/1234166/


All Articles