所以我有這個問題,我需要用孩子的 id、名字和父母的 id 和名字的物件填寫一個串列,以便進一步的后端作業。
當我選擇一個孩子并遞回地填寫串列時,它會給我這個輸出
[
{
"_id": "6328354914a6c4002121c2c6",
"name": "sss21"
},
{
"_id": "6328354914a6c4002121c2c6",
"name": "ss21"
},
{
"_id": "6328354914a6c4002121c2c6",
"name": "s1"
},
{
"_id": "6328351214a6c4002121c2c5",
"name": "new"
},
{
"_id": "6328354914a6c4002121c2c6",
"name": "s1"
},
{
"_id": "6328354914a6c4002121c2c6",
"name": "ss21"
},
{
"_id": "6328354914a6c4002121c2c6",
"name": "sss21"
}
]
我用這個函式來填充串列
selectionOutput(node) {
const id = node._id;
const name = node.name;
if (node.parent !== null) {
this.selection.push({_id: id, name: name});
this.selectionOutput(node.parent);
}
this.selection.push({_id: id, name: name});
return this.selection;
}
該函式需要一個帶有父節點的節點,在這種情況下就是這個
{
"_id": "6328351214a6c4002121c2c5",
"name": "new"
}
其他 3 個像“s1、ss21 和 sss21”是它的孩子。
我怎樣才能讓函式只回傳
[
{
"_id": "6328351214a6c4002121c2c5",
"name": "new"
},
{
"_id": "6328354914a6c4002121c2c6",
"name": "s1"
},
{
"_id": "6328354914a6c4002121c2c6",
"name": "ss21"
},
{
"_id": "6328354914a6c4002121c2c6",
"name": "sss21"
}
]
我可能應該補充一點,我的資料結構如下所示:
{
"_id": "6328351214a6c4002121c2c5",
"name": "new"
"parent": null,
"children": {
"_id": "6328354914a6c4002121c2c6",
"name": "s1",
"parent": {"_id": "6328351214a6c4002121c2c5","name": "new"}
"children": {
"_id": "6328354914a6c4002121c2c6",
"name": "ss21",
"parent": {"_id": "6328354914a6c4002121c2c6","name": "s1"}
"children":{...} Hope you get the point
}
},...
}
我的函式也被喂給了一個子物件,它從那里上升了一個層次。例如 child3(parent: child2) -> child2(parent:child1) -> child1(parent: parent) -> parent。我想將所有 id 映射到初始物件的所有祖先,包括初始物件的 id。
uj5u.com熱心網友回復:
查看您的資料結構,您可以嘗試這種方法:
data.reduce((accum, item) => {
const childs = [];
const getChilds = ({ _id, name, children}) => {
childs.push({ _id, name});
if (children) getChilds(children);
};
if (item.children) getChilds(item.children);
return [...accum, { _id: item._id, name: item.name, children: childs }];
}, [])
或者,如果您想要根級別的所有資料
data.reduce((accum, item) => {
const childs = [];
const getChilds = ({ _id, name, children}) => {
childs.push({ _id, name});
if (children) getChilds(children);
};
if (item.children) getChilds(item.children);
return [...accum, { _id: item._id, name: item.name }, ...childs];
}, [])
``
uj5u.com熱心網友回復:
只需一鍵即可完成所需的功能。我將推送移到 if 陳述句之前,現在可以正常作業了。
selectionOutput(node) {
const id = node._id;
const name = node.name;
this.selection.push({_id: id, name: name});
if (node.parent) {
this.selectionOutput(node.parent);
}
return this.selection;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/516791.html
下一篇:角度變數更改未檢測到html
