我有以下结构:
var struct = [{
"name": "Name1",
"type": "type1",
"children": [{
"name": "Name11",
"type": "type1",
"children": [{
"name": "Name111",
"type": "type1"
},
{
"name": "Name112",
"type": "type2"
}
}]
}]
}];
我想迭代所有类型等于type1
的名称类型元素,并为每个元素创建一个<option>
元素。
所以它会是这样的:
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;
};
然而,它给了我错误的结果。而且效率可能非常低。我该怎么做呢?
答案 0 :(得分:1)
您可以使用迭代递归方法来获取嵌套数据。
function getElements(data) {
var elements = [];
data.forEach(function iter(a) {
var option;
if (a.type === 'type1') {
option = document.createElement('option');
option.innerHTML = a.name;
elements.push(option);
Array.isArray(a.children) && a.children.forEach(iter); // assuming only
} // type1 branches
}); // to iterate
return elements;
}
var struct = [{ "name": "Name1", "type": "type1", "children": [{ "name": "Name11", "type": "type1", "children": [{ "name": "Name111", "type": "type1" }, { "name": "Name112", "type": "type2" }] }] }];
console.log(getElements(struct));
答案 1 :(得分:0)
我认为你不能使用任何“元素”var,只需试试这个:
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;
};