再帰を使用すると、配列レベルに制限されることなく、コードの量を減らすことができます。
findメソッドを使用して、配列ループの数を減らします。
配列形式:
let a = [
{
id: 2,
hasChildren: true,
children: [
{
id: 5,
hasChildren: true,
children: [
{
id: 3,
hasChildren: false,
},
{
id: 4,
hasChildren: false,
},
],
},
],
},
];
方法:
function get_level_all(data, id, arr = []) {
data.find((item) => {
if (item.id === id) {
arr.push(item.id);
return true;
} else if (item.hasChildren && item.children.length) {
arr = get_level_all(item.children, id, arr);
if (arr.length) {
arr.push(item.id);
return true;
} else {
return false;
}
}
return false;
});
return arr;
}
移行:
get_type_level_all(a, 4) //返回 [4, 5, 2]