我的代码中有一个笨拙且无法扩展的方法。
y 是具有键/值的对象的 array 对象,具有两个属性:
名称字符串属性,该属性是唯一的: 该值由 children 属性进行区分,该属性是与y具有相同对象类型的另一个数组。
for (var i = 0; i < y.length; i++) {
let objx = y[i];
let name = objx["name"];
let inner = objx["children"];
for (var i = 0; i < inner.length; i++) {
var z = inner[i]["name"];
let h = inner[i]["children"];
console.log(h);
}
// more for loops on the h object now, and so on.
}
是否有可能只构建一个包含所有 name 字符串属性的新集合,直到所有各个 children 属性都返回0的方法?
>答案 0 :(得分:1)
let y = {
name: 'parent',
children: [
{name: 'child1', children: []},
{
name: 'child2', children: [
{name: 'grandChild1', children: []}
]
},
]
};
let getNames = y => [y.name, ...y.children.flatMap(getNames)];
let names = getNames(y);
console.log(names);
答案 1 :(得分:0)
您可以采用递归函数。
source
答案 2 :(得分:0)
这是基本的递归。创建一个循环数据并使用子代调用的函数。
var myData = [{
name: 'foo',
children: [{
name: 'foo-1',
children: [{
name: 'foo-1-1'
}]
}, {
name: 'foo-2',
children: [{
name: 'foo-2-1'
}]
}]
}]
function loopOver(array, result) {
array.forEach( function (data) {
console.log(data.name)
result.push(data.name)
if (data.children) {
return loopOver(data.children, result)
}
})
return result
}
console.log(loopOver(myData, []))