Find an element in an array recursively

I have an array of objects. Each array object has an id and an item property, which is an array containing another object. I need to find an element in an array by id. Here is an example of what I have done so far, but a recursive function always returns undefined.

How can I exit a function and return an element when I called the function recursively several times?

$(function () { var treeDataSource = [{ id: 1, Name: "Test1", items: [{ id: 2, Name: "Test2", items: [{ id: 3, Name: "Test3" }] }] }]; var getSubMenuItem = function (subMenuItems, id) { if (subMenuItems && subMenuItems.length > 0) { for (var i = 0; i < subMenuItems.length; i++) { var item; if (subMenuItems[i].Id == id) { item = subMenuItems[i]; return item; }; getSubMenuItem(subMenuItems[i].items, id); }; }; }; var searchedItem = getSubMenuItem(treeDataSource, 3); alert(searchedItem.id); }); 

jsFiddle

+8
javascript algorithm
source share
1 answer

You have to replace

  getSubMenuItem(subMenuItems[i].items, id); 

from

  var found = getSubMenuItem(subMenuItems[i].items, id); if (found) return found; 

to return an item when it is found.

And be careful with the name of the properties, javascript is case sensitive, so you should also replace

  if (subMenuItems[i].Id == id) { 

from

  if (subMenuItems[i].Id == id) { 

Demonstration


Final (cleared) code:

 var getSubMenuItem = function (subMenuItems, id) { if (subMenuItems) { for (var i = 0; i < subMenuItems.length; i++) { if (subMenuItems[i].id == id) { return subMenuItems[i]; } var found = getSubMenuItem(subMenuItems[i].items, id); if (found) return found; } } }; 
+17
source share

All Articles