递归查找数组中的元素

我有一个对象数组。数组中的每个对象都有一个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);

});

回答:

你应该更换

  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;

}

}

};

以上是 递归查找数组中的元素 的全部内容, 来源链接: utcz.com/qa/431771.html

回到顶部