Javascript 结构上的递归迭代

Javascript 结构上的递归迭代,javascript,recursion,Javascript,Recursion,我的结构如下: var struct = [{ "name": "Name1", "type": "type1", "children": [{ "name": "Name11", "type": "type1", "children": [{ "name": "Name111", "type": "type1" }, {

我的结构如下:

var struct = [{
    "name": "Name1",
    "type": "type1",
    "children": [{
        "name": "Name11",
        "type": "type1",
        "children": [{
            "name": "Name111",
            "type": "type1"
            },
            {
            "name": "Name112",
            "type": "type2"
            }
        }]
    }]
}];
我想迭代所有name-type元素,其中type等于
type1
,并为每个元素创建一个
元素

所以它会是这样的:

var iterate = function (data) {
   var elements = [];
   for (var i in data) {
      if (data[i].type == 'type1') {
         var option = document.createElement('option');
         option.innerHTML = data[i].name;
         elements.push(option);
         elements.push(iterate(data[i].children));
      }
   }
   return elements;
};

然而,它给了我错误的结果。而且可能效率很低。我应该如何正确地执行此操作?

我认为您不能使用任何“元素”变量,请尝试以下操作:

var iterate = function (data) {
   for (var i in data) {
      if (data[i].type == 'type1') {
         var option = document.createElement('option');
         option.innerHTML = data[i].name;
         data[i].push(option);
         iterate(data[i].children);
      }
   }
   return data;
};

您可以使用迭代递归方法来获取嵌套数据

函数getElements(数据){ var元素=[]; 数据。forEach(功能iter(a){ var期权; 如果(a.type==='type1'){ option=document.createElement('option'); option.innerHTML=a.name; 元素。推送(选项); Array.isArray(a.children)和&a.children.forEach(iter);//仅假设 }//类型1分支 });//迭代 返回元素; } var struct=[{“name”:“Name1”,“type”:“type1”,“children”:[{“name”:“Name11”,“type”:“type1”,“children”:[{“name”:“Name111”,“type”:“type1”,“type”:“type2”}]}];
log(getElements(struct))酷,它可以工作。问题是它是否比递归方法更快。它是递归的,在这一行:
Array.isArray(a.children)和&a.children.forEach(iter)