2
私は本当にこれを理解することができません。特定のノードの深い子であるcategory_id
を平坦化しようとしています。Javascriptの深いネストされた子どもたちを平らにします
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"
}];
または視覚的には:children(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;
}
電流出力が['66', '67', '68']
次のとおりです。
私が得た最も近いが見つかりました。最初の項目を再帰的にループすることでした。私はlodashを使用しています
function getChildren(id, categories) {
var children = [];
_.filter(categories, function(c) {
return c["parent_id"] === id;
}).forEach(function(c) {
children.push(c);
children = children.concat(getChildren(c.category_id, categories));
})
return children;
}
:
の予想される出力は、私がテストしていないが、それは動作するはず['66', '67', '68', '69']
なぜ何かが再帰的になる必要がありますか?これはオブジェクトの単純な配列です。 –
複数のレベルがあるので、私が何かを監督していない限り、私のparent_idは常に親に最も近いですか? – veksen
だから、その親の下にあるすべてのノードを含む親からすべての子のIDが始まるようにしますか? –