繁体   English   中英

Javascript 按对象数组分组(复杂对象)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM