我有一个对象数组。数组中的每个对象都有一个ID和一个item属性,该属性是一个包含其他对象的数组。我需要能够通过id在数组中找到一个元素。这是到目前为止我所做的一个示例,但是递归函数总是返回未定义的。
多次递归调用函数后,如何退出函数并返回项目?
$(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
你应该更换
getSubMenuItem(subMenuItems[i].items, id);
与
var found = getSubMenuItem(subMenuItems[i].items, id); if (found) return found;
为了在找到元素时返回它。
并注意属性名称,javascript区分大小写,因此您还必须替换
if (subMenuItems[i].Id == id) {
if (subMenuItems[i].id == id) {
示范
最终(清除)代码:
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; } } };