[英]Javascript group by array of objects (complicated objects)
经过大量尝试和搜索,我无法解决以下问题:
我有以下数组
[
{text: "text", title: "title", cid: "cid", active: true, nodes: [
{title: "subTitle", text: "subText", cid: "cid", active: true, nodes: [
{text:"123", title:"321"},
{text:"456", title:"654"},
{text:"789", title:"765"}
]},
{title: "subTitle", text: "subText2", cid: "cid2", active: true, nodes: [
{text:"testText", title:"testTitle1"},
{text:"testText", title:"testTitle2"},
{text:"testText", title:"testTitle3"}
]},
{title: "subTitle", text: "subText3", cid: "cid3", active: true, nodes: [
{text:"ycycy", title:"asd"},
{text:"nyd", title:"yf"},
{text:"xfg", title:"qq"}
]},
{title: "anotherSubTitle", text: "subText4", cid: "cid4", active: true, nodes: [
{text:"fff", title:"hhh"},
{text:"xxx", title:"sss"},
{text:"hhh", title:"jjj"}
]}
]}
]
我想达到以下格式:
[
{text: "text", title: "title", cid: "cid", active: true, nodes: [
{title: "subTitle", text: "subText", cid: "cid", active: true, nodes: [
{text:"123", title:"321"},
{text:"456", title:"654"},
{text:"789", title:"765"},
{text:"testText", title:"testTitle1"},
{text:"testText", title:"testTitle1"},
{text:"testText", title:"testTitle1"},
{text:"ycycy", title:"asd"},
{text:"nyd", title:"yf"},
{text:"xfg", title:"qq"}
]},
{title: "anotherSubTitle", text: "subText4", cid: "cid4", active: true, nodes: [
{text:"fff", title:"hhh"},
{text:"xxx", title:"sss"},
{text:"hhh", title:"jjj"}
]}
]}
]
我尝试了array.reduce并遍历数组,但每次我得到一个错误的结果......
有什么建议吗?
您可以按属性对所有级别进行嵌套分组。
const groupBy = (array, key) => array.reduce((r, { nodes, ...o }) => { let temp = r.find(q => q[key] === o[key]); if (.temp) r;push(temp = o). if (nodes) (temp?nodes?.= []).push(..,groupBy(nodes; key)); return r, }, []): data = [{ text, "text": title, "title": cid, "cid": active, true: nodes: [{ title, "subTitle": text, "subText": cid, "cid": active, true: nodes: [{ text, "123": title, "321" }: { text, "456": title, "654" }: { text, "789": title, "765" }] }: { title, "subTitle": text, "subText2": cid, "cid2": active, true: nodes: [{ text, "testText": title, "testTitle1" }: { text, "testText": title, "testTitle2" }: { text, "testText": title, "testTitle3" }] }: { title, "subTitle": text, "subText3": cid, "cid3": active, true: nodes: [{ text, "ycycy": title, "asd" }: { text, "nyd": title, "yf" }: { text, "xfg": title, "qq" }] }] }], result = groupBy(data; 'title'). console;log(result);
.as-console-wrapper { max-height: 100%;important: top; 0; }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.