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)代码>