【发布时间】:2016-08-10 16:29:01
【问题描述】:
我真的想不通这个。我正在尝试展平作为特定节点的深层子节点的 category_id。
var categories = [{
"category_id": "66",
"parent_id": "59"
}, {
"category_id": "68",
"parent_id": "67",
}, {
"category_id": "69",
"parent_id": "59"
}, {
"category_id": "59",
"parent_id": "0",
}, {
"category_id": "67",
"parent_id": "66"
}, {
"category_id": "69",
"parent_id": "59"
}];
或视觉上:
我最接近的是递归循环找到的第一个项目:
function children(category) {
var children = [];
var getChild = function(curr_id) {
// how can I handle all of the cats, and not only the first one?
return _.first(_.filter(categories, {
'parent_id': String(curr_id)
}));
};
var curr = category.category_id;
while (getChild(curr)) {
var child = getChild(curr).category_id;
children.push(child);
curr = child;
}
return children;
}
children(59) 的当前输出为['66', '67', '68']。
预期输出为['66', '67', '68', '69']
【问题讨论】:
-
为什么需要递归?这是一个简单的对象数组。
-
因为有多个级别,所以我的 parent_id 总是最接近的父级,除非我在监督什么?
-
所以您希望所有子 ID 都从父级开始,包括该父级下的所有节点?
-
这非常接近拓扑排序,以防您稍后使用谷歌搜索。
标签: javascript arrays object while-loop nested-loops