您好,我有一个这样的值数组

Input

[
  {
    "managerName": "Nikolai",
    "advisorName": "Dhanush",
    "clientName": "Thor Odin",
    "id": "Client 1",
    "goalName": "",
    "goalAmount": "",
    "goals": 2,
    "score": 86,
    "lastModified": "22/1/2022",
    "equityFixedIncome": "",
    "subRows": [
      {
        "managerName": "",
        "advisorName": "",
        "clientName": "",
        "id": "goal-1",
        "goalName": "Retirement1",
        "goalAmount": 10000,
        "goals": "",
        "equityFixedIncome": "60/40",
        "lastModified": "22/1/2022",
        "score": 99
      },
      {
        "managerName": "",
        "advisorName": "",
        "clientName": "",
        "id": "goal-2",
        "goalName": "Save For Child Education",
        "goalAmount": 70000,
        "goals": "",
        "equityFixedIncome": "55/45",
        "lastModified": "5/12/2023",
        "score": 72
      }
    ]
  },
  {
    "managerName": "Nikolai",
    "advisorName": "Dhanush",
    "clientName": "Steve Rogers",
    "id": "Client 2",
    "goalName": "Save for Investment",
    "goalAmount": 67000,
    "goals": 1,
    "score": 70,
    "lastModified": "22/1/2022",
    "equityFixedIncome": "60/40"
  },
  {
    "managerName": "Nikolai",
    "advisorName": "Dhanush",
    "clientName": "Wanda Vision",
    "id": "Client 3",
    "goals": 0,
    "score": 0,
    "lastModified": "",
    "equityFixedIncome": ""
  },
  {
    "managerName": "Nikolai",
    "advisorName": "Dhanush",
    "clientName": "Tony Stark",
    "id": "Client 4",
    "goalName": "",
    "goalAmount": "",
    "goals": 2,
    "score": 29,
    "lastModified": "27/10/2019",
    "equityFixedIncome": "",
    "subRows": [
      {
        "managerName": "",
        "advisorName": "",
        "clientName": "",
        "id": "goal-4",
        "goalName": "Education Loan",
        "goalAmount": 500,
        "goals": "",
        "equityFixedIncome": "60/40",
        "lastModified": "27/10/2019",
        "score": 29
      },
      {
        "managerName": "",
        "advisorName": "",
        "clientName": "",
        "id": "goal-5",
        "goalName": "House Loan",
        "goalAmount": 23000,
        "goals": "",
        "equityFixedIncome": "30/70",
        "lastModified": "16/6/2022",
        "score": 29
      }
    ]
  },
  {
    "managerName": "Nikolai",
    "advisorName": "Joe",
    "clientName": "Hack Eye",
    "id": "Client 5",
    "goalName": "Save For World Tour",
    "goalAmount": 400000,
    "goals": 1,
    "score": 74,
    "lastModified": "",
    "equityFixedIncome": "60/40"
  },
  {
    "managerName": "Nikolai",
    "advisorName": "Joe",
    "clientName": "Nick Fury",
    "id": "Client 6",
    "goalName": "",
    "goalAmount": "",
    "goals": 2,
    "score": 44,
    "lastModified": "9/3/2022",
    "equityFixedIncome": "",
    "subRows": [
      {
        "managerName": "",
        "advisorName": "",
        "clientName": "",
        "id": "goal-7",
        "goalName": "To Build A Workspace",
        "goalAmount": 42340,
        "goals": "",
        "equityFixedIncome": "60/40",
        "lastModified": "9/3/2022",
        "score": 60
      },
      {
        "managerName": "",
        "advisorName": "",
        "clientName": "",
        "id": "goal-8",
        "goalName": "Cloud Examination",
        "goalAmount": 8730,
        "goals": "",
        "equityFixedIncome": "30/70",
        "lastModified": "9/11/2021",
        "score": 29
      }
    ]
  },
  {
    "managerName": "Nikolai",
    "advisorName": "Joe",
    "clientName": "Star Lord",
    "id": "Client 7",
    "goalName": "Save For Child Education",
    "goalAmount": 400000,
    "goals": 1,
    "score": 93,
    "lastModified": "",
    "equityFixedIncome": "55/45"
  },
  {
    "managerName": "Rohan",
    "advisorName": "Pal",
    "clientName": "Thanos",
    "id": "Client 8",
    "goalName": "",
    "goalAmount": "",
    "goals": 3,
    "score": 29,
    "lastModified": "2/11/2019",
    "equityFixedIncome": "",
    "subRows": [
      {
        "managerName": "",
        "advisorName": "",
        "clientName": "",
        "id": "goal-10",
        "goalName": "Relocation Expense Goal",
        "goalAmount": 400000,
        "goals": "",
        "equityFixedIncome": "22/78",
        "lastModified": "2/11/2019",
        "score": 29
      },
      {
        "managerName": "",
        "advisorName": "",
        "clientName": "",
        "id": "goal-11",
        "goalName": "Save for to buy bike",
        "goalAmount": 400000,
        "goals": "",
        "equityFixedIncome": "50/50",
        "lastModified": "1/1/2020",
        "score": 29
      },
      {
        "managerName": "",
        "advisorName": "",
        "clientName": "",
        "id": "goal-12",
        "goalName": "Save For Education",
        "goalAmount": 400000,
        "goals": "",
        "equityFixedIncome": "65/35",
        "lastModified": "9/5/2022",
        "score": 29
      }
    ]
  },
  {
    "managerName": "Rohan",
    "advisorName": "Pal",
    "clientName": "Ego",
    "id": "Client 9",
    "goalName": "Save For Education",
    "goalAmount": 400000,
    "goals": 1,
    "score": 72,
    "lastModified": "",
    "equityFixedIncome": "65/35"
  },
  {
    "managerName": "Rohan",
    "advisorName": "Pal",
    "clientName": "Bruce Banner",
    "id": "Client 10",
    "goalName": "",
    "goalAmount": "",
    "goals": 2,
    "score": 98,
    "lastModified": "9/10/2018",
    "equityFixedIncome": "",
    "subRows": [
      {
        "managerName": "",
        "advisorName": "",
        "clientName": "",
        "id": "goal-14",
        "goalName": "Car Loan",
        "goalAmount": 23000,
        "goals": "",
        "equityFixedIncome": "60/40",
        "lastModified": "9/10/2018",
        "score": 99
      },
      {
        "managerName": "",
        "advisorName": "",
        "clientName": "",
        "id": "goal-15",
        "goalName": "Bike Loan",
        "goalAmount": 4600,
        "goals": "",
        "equityFixedIncome": "30/70",
        "lastModified": "9/11/2021",
        "score": 96
      }
    ]
  },
  {
    "managerName": "Rohan",
    "advisorName": "Dhanush",
    "clientName": "Bruce Banner",
    "id": "Client 11",
    "goalName": "",
    "goalAmount": "",
    "goals": 2,
    "score": 98,
    "lastModified": "9/10/2018",
    "equityFixedIncome": "",
    "subRows": [
      {
        "managerName": "",
        "advisorName": "",
        "clientName": "",
        "id": "goal-14",
        "goalName": "Car Loan",
        "goalAmount": 23000,
        "goals": "",
        "equityFixedIncome": "60/40",
        "lastModified": "9/10/2018",
        "score": 99
      },
      {
        "managerName": "",
        "advisorName": "",
        "clientName": "",
        "id": "goal-15",
        "goalName": "Bike Loan",
        "goalAmount": 4600,
        "goals": "",
        "equityFixedIncome": "30/70",
        "lastModified": "9/11/2021",
        "score": 96
      }
    ]
  },
  {
    "managerName": "Nikolai",
    "advisorName": "Dhanush",
    "clientName": "Bruce Banner",
    "id": "Client 12",
    "goalName": "",
    "goalAmount": "",
    "goals": 2,
    "score": 98,
    "lastModified": "9/10/2018",
    "equityFixedIncome": "",
    "subRows": [
      {
        "managerName": "",
        "advisorName": "",
        "clientName": "",
        "id": "goal-14",
        "goalName": "Car Loan",
        "goalAmount": 23000,
        "goals": "",
        "equityFixedIncome": "60/40",
        "lastModified": "9/10/2018",
        "score": 99
      },
      {
        "managerName": "",
        "advisorName": "",
        "clientName": "",
        "id": "goal-15",
        "goalName": "Bike Loan",
        "goalAmount": 4600,
        "goals": "",
        "equityFixedIncome": "30/70",
        "lastModified": "9/11/2021",
        "score": 96
      }
    ]
  },
  {
    "managerName": "Suresh Murugaiyan",
    "advisorName": "Loki",
    "clientName": "Yondu",
    "id": "Client 13",
    "goalName": "",
    "goalAmount": "",
    "goals": 2,
    "score": 98,
    "lastModified": "9/10/2018",
    "equityFixedIncome": "",
    "subRows": [
      {
        "managerName": "",
        "advisorName": "",
        "clientName": "",
        "id": "goal-14",
        "goalName": "Car Loan",
        "goalAmount": 23000,
        "goals": "",
        "equityFixedIncome": "60/40",
        "lastModified": "9/10/2018",
        "score": 99
      },
      {
        "managerName": "",
        "advisorName": "",
        "clientName": "",
        "id": "goal-15",
        "goalName": "Bike Loan",
        "goalAmount": 4600,
        "goals": "",
        "equityFixedIncome": "30/70",
        "lastModified": "9/11/2021",
        "score": 96
      }
    ]
  },
  {
    "managerName": "Nikolai",
    "advisorName": "Dhanush",
    "clientName": "Thor Odin",
    "id": "Client 1",
    "goalName": "",
    "goalAmount": "",
    "goals": 2,
    "score": 86,
    "lastModified": "22/1/2022",
    "equityFixedIncome": "",
    "subRows": [
      {
        "managerName": "",
        "advisorName": "",
        "clientName": "",
        "id": "goal-1",
        "goalName": "Retirement1",
        "goalAmount": 10000,
        "goals": "",
        "equityFixedIncome": "60/40",
        "lastModified": "22/1/2022",
        "score": 99
      },
      {
        "managerName": "",
        "advisorName": "",
        "clientName": "",
        "id": "goal-2",
        "goalName": "Save For Child Education",
        "goalAmount": 70000,
        "goals": "",
        "equityFixedIncome": "55/45",
        "lastModified": "5/12/2023",
        "score": 72
      }
    ]
  }
]

----------


通过使用以下函数

const data = [{"managerName":"Nikolai","advisorName":"Dhanush","clientName":"Thor Odin","id":"Client 1","goalName":"","goalAmount":"","goals":2,"score":86,"lastModified":"22/1/2022","equityFixedIncome":"","subRows":[{"managerName":"","advisorName":"","clientName":"","id":"goal-1","goalName":"Retirement1","goalAmount":10000,"goals":"","equityFixedIncome":"60/40","lastModified":"22/1/2022","score":99},{"managerName":"","advisorName":"","clientName":"","id":"goal-2","goalName":"Save For Child Education","goalAmount":70000,"goals":"","equityFixedIncome":"55/45","lastModified":"5/12/2023","score":72}]},{"managerName":"Nikolai","advisorName":"Dhanush","clientName":"Steve Rogers","id":"Client 2","goalName":"Save for Investment","goalAmount":67000,"goals":1,"score":70,"lastModified":"22/1/2022","equityFixedIncome":"60/40"},{"managerName":"Nikolai","advisorName":"Dhanush","clientName":"Wanda Vision","id":"Client 3","goals":0,"score":0,"lastModified":"","equityFixedIncome":""},{"managerName":"Nikolai","advisorName":"Dhanush","clientName":"Tony Stark","id":"Client 4","goalName":"","goalAmount":"","goals":2,"score":29,"lastModified":"27/10/2019","equityFixedIncome":"","subRows":[{"managerName":"","advisorName":"","clientName":"","id":"goal-4","goalName":"Education Loan","goalAmount":500,"goals":"","equityFixedIncome":"60/40","lastModified":"27/10/2019","score":29},{"managerName":"","advisorName":"","clientName":"","id":"goal-5","goalName":"House Loan","goalAmount":23000,"goals":"","equityFixedIncome":"30/70","lastModified":"16/6/2022","score":29}]},{"managerName":"Nikolai","advisorName":"Joe","clientName":"Hack Eye","id":"Client 5","goalName":"Save For World Tour","goalAmount":400000,"goals":1,"score":74,"lastModified":"","equityFixedIncome":"60/40"},{"managerName":"Nikolai","advisorName":"Joe","clientName":"Nick Fury","id":"Client 6","goalName":"","goalAmount":"","goals":2,"score":44,"lastModified":"9/3/2022","equityFixedIncome":"","subRows":[{"managerName":"","advisorName":"","clientName":"","id":"goal-7","goalName":"To Build A Workspace","goalAmount":42340,"goals":"","equityFixedIncome":"60/40","lastModified":"9/3/2022","score":60},{"managerName":"","advisorName":"","clientName":"","id":"goal-8","goalName":"Cloud Examination","goalAmount":8730,"goals":"","equityFixedIncome":"30/70","lastModified":"9/11/2021","score":29}]},{"managerName":"Nikolai","advisorName":"Joe","clientName":"Star Lord","id":"Client 7","goalName":"Save For Child Education","goalAmount":400000,"goals":1,"score":93,"lastModified":"","equityFixedIncome":"55/45"},{"managerName":"Rohan","advisorName":"Pal","clientName":"Thanos","id":"Client 8","goalName":"","goalAmount":"","goals":3,"score":29,"lastModified":"2/11/2019","equityFixedIncome":"","subRows":[{"managerName":"","advisorName":"","clientName":"","id":"goal-10","goalName":"Relocation Expense Goal","goalAmount":400000,"goals":"","equityFixedIncome":"22/78","lastModified":"2/11/2019","score":29},{"managerName":"","advisorName":"","clientName":"","id":"goal-11","goalName":"Save for to buy bike","goalAmount":400000,"goals":"","equityFixedIncome":"50/50","lastModified":"1/1/2020","score":29},{"managerName":"","advisorName":"","clientName":"","id":"goal-12","goalName":"Save For Education","goalAmount":400000,"goals":"","equityFixedIncome":"65/35","lastModified":"9/5/2022","score":29}]},{"managerName":"Rohan","advisorName":"Pal","clientName":"Ego","id":"Client 9","goalName":"Save For Education","goalAmount":400000,"goals":1,"score":72,"lastModified":"","equityFixedIncome":"65/35"},{"managerName":"Rohan","advisorName":"Pal","clientName":"Bruce Banner","id":"Client 10","goalName":"","goalAmount":"","goals":2,"score":98,"lastModified":"9/10/2018","equityFixedIncome":"","subRows":[{"managerName":"","advisorName":"","clientName":"","id":"goal-14","goalName":"Car Loan","goalAmount":23000,"goals":"","equityFixedIncome":"60/40","lastModified":"9/10/2018","score":99},{"managerName":"","advisorName":"","clientName":"","id":"goal-15","goalName":"Bike Loan","goalAmount":4600,"goals":"","equityFixedIncome":"30/70","lastModified":"9/11/2021","score":96}]},{"managerName":"Rohan","advisorName":"Dhanush","clientName":"Bruce Banner","id":"Client 11","goalName":"","goalAmount":"","goals":2,"score":98,"lastModified":"9/10/2018","equityFixedIncome":"","subRows":[{"managerName":"","advisorName":"","clientName":"","id":"goal-14","goalName":"Car Loan","goalAmount":23000,"goals":"","equityFixedIncome":"60/40","lastModified":"9/10/2018","score":99},{"managerName":"","advisorName":"","clientName":"","id":"goal-15","goalName":"Bike Loan","goalAmount":4600,"goals":"","equityFixedIncome":"30/70","lastModified":"9/11/2021","score":96}]},{"managerName":"Nikolai","advisorName":"Dhanush","clientName":"Bruce Banner","id":"Client 12","goalName":"","goalAmount":"","goals":2,"score":98,"lastModified":"9/10/2018","equityFixedIncome":"","subRows":[{"managerName":"","advisorName":"","clientName":"","id":"goal-14","goalName":"Car Loan","goalAmount":23000,"goals":"","equityFixedIncome":"60/40","lastModified":"9/10/2018","score":99},{"managerName":"","advisorName":"","clientName":"","id":"goal-15","goalName":"Bike Loan","goalAmount":4600,"goals":"","equityFixedIncome":"30/70","lastModified":"9/11/2021","score":96}]},{"managerName":"Suresh Murugaiyan","advisorName":"Loki","clientName":"Yondu","id":"Client 13","goalName":"","goalAmount":"","goals":2,"score":98,"lastModified":"9/10/2018","equityFixedIncome":"","subRows":[{"managerName":"","advisorName":"","clientName":"","id":"goal-14","goalName":"Car Loan","goalAmount":23000,"goals":"","equityFixedIncome":"60/40","lastModified":"9/10/2018","score":99},{"managerName":"","advisorName":"","clientName":"","id":"goal-15","goalName":"Bike Loan","goalAmount":4600,"goals":"","equityFixedIncome":"30/70","lastModified":"9/11/2021","score":96}]},{"managerName":"Nikolai","advisorName":"Dhanush","clientName":"Thor Odin","id":"Client 1","goalName":"","goalAmount":"","goals":2,"score":86,"lastModified":"22/1/2022","equityFixedIncome":"","subRows":[{"managerName":"","advisorName":"","clientName":"","id":"goal-1","goalName":"Retirement1","goalAmount":10000,"goals":"","equityFixedIncome":"60/40","lastModified":"22/1/2022","score":99},{"managerName":"","advisorName":"","clientName":"","id":"goal-2","goalName":"Save For Child Education","goalAmount":70000,"goals":"","equityFixedIncome":"55/45","lastModified":"5/12/2023","score":72}]}]

function groupByManager(val){
    const
    nodOrder = 
      { managerName: '',  advisorName: '', clientName: '', id: ''
      , goalName: ''   ,  goalAmount: '',  goals: '',      score: ''
      , lastModified: '', equityFixedIncome: ''
      } 
  , levels = 
      { managerName: { arr: null, val: '' }
      , advisorName: { arr: null, val: '' }
      , clientName:  { arr: null }
      }
  , resultData = []
    ;

    val.forEach( ({ managerName, advisorName, ...otherProps }) => 
    {
    let
      row_0 = Object.assign({}, nodOrder, { managerName })
    , row_1 = Object.assign({}, nodOrder, { advisorName })
    , row_2 = Object.assign({}, nodOrder, otherProps )
      ;

    if (levels.managerName.val !== managerName )
      {

      levels.managerName.val = managerName 
      levels.managerName.arr = row_0.subRows = []
      levels.advisorName.val = ''
      resultData.push( row_0 )
      }

    if (levels.advisorName.val !== advisorName )
      {
      levels.advisorName.val = advisorName 
      levels.advisorName.arr = row_1.subRows = []
      levels.managerName.arr.push( row_1 )
      }

  
    levels.clientName.arr = (otherProps.subRows) ? (row_2.subRows = []) : null
    levels.advisorName.arr.push( row_2 )
  
    if (otherProps.subRows) 
      {
      otherProps.subRows.forEach( subRow => 
        {
        let sRow = Object.assign({}, nodOrder, subRow )
        levels.clientName.arr.push( sRow )
        })
      }
    })
  return resultData
}

console.log(JSON.stringify(groupByManager(data)))

我正在将数据转换为这样的格式-https://codesandbox.io/s/tanstack-table-expansion-1t77ks?file=/src/data/table-data.json:0-9490.然后将其用于@tastack-react-table.您可以在此处看到该应用程序的演示-https://codesandbox.io/s/tanstack-table-expansion-1t77ks?file=/src/App.js

在上面的代码转换中,只有当值以正确的顺序出现时,分组才能正常工作.这意味着在第一个对象中,您可以看到managerName Nikolai,对接下来的7个对象重复相同的值.之后,对接下来的3个对象重复不同的managerNameAS Rohan.

这里,managerName AS Nikolai已经形成了一个组,在该managerName之后,Rohan已经形成了另一个组,并且如果managerName Nikolai重复,则意味着它形成了一个单独的组,而不是与已有的可用的组不在一起.

你可以通过查看下面的图片来更好地了解.您可以看到名称Nikolai再次出现.它不会与已经分组的一个组形成一个组.

enter image description here

另外,这advisorName人也没有正确分组.它会出现相同的错误.

enter image description here

我试着解决这个问题,但我不知道我在哪里搞错了,请帮我解决这个问题.

Expected Output

[{"managerName":"Nikolai","advisorName":"","id":"","clientName":"","goalName":"","goalAmount":"","goals":"","score":"","lastModified":"","equityFixedIncome":"","subRows":[{"advisorName":"Dhanush","managerName":"","id":"","clientName":"","goalName":"","goalAmount":"","goals":"","score":"","lastModified":"","equityFixedIncome":"","subRows":[{"advisorName":"","managerName":"","id":"Client 1","clientName":"Thor Odin","goalName":"","goalAmount":"","goals":2,"score":86,"lastModified":"22/1/2022","equityFixedIncome":"","subRows":[{"managerName":"","advisorName":"","clientName":"","id":"goal-1","goalName":"Retirement1","goalAmount":10000,"goals":"","equityFixedIncome":"60/40","lastModified":"22/1/2022","score":99},{"managerName":"","advisorName":"","clientName":"","id":"goal-2","goalName":"Save For Child Education","goalAmount":70000,"goals":"","equityFixedIncome":"55/45","lastModified":"5/12/2023","score":72}]},{"advisorName":"","managerName":"","id":"Client 2","clientName":"Steve Rogers","goalName":"Save for Investment","goalAmount":67000,"goals":1,"score":70,"lastModified":"22/1/2022","equityFixedIncome":"60/40"},{"advisorName":"","managerName":"","id":"Client 3","clientName":"Wanda Vision","goals":0,"score":0,"lastModified":"","equityFixedIncome":""},{"advisorName":"","managerName":"","id":"Client 4","clientName":"Tony Stark","goalName":"","goalAmount":"","goals":2,"score":29,"lastModified":"27/10/2019","equityFixedIncome":"","subRows":[{"managerName":"","advisorName":"","clientName":"","id":"goal-4","goalName":"Education Loan","goalAmount":500,"goals":"","equityFixedIncome":"60/40","lastModified":"27/10/2019","score":29},{"managerName":"","advisorName":"","clientName":"","id":"goal-5","goalName":"House Loan","goalAmount":23000,"goals":"","equityFixedIncome":"30/70","lastModified":"16/6/2022","score":29}]},{"advisorName":"","managerName":"","id":"Client 11","clientName":"Bruce Banner","goalName":"","goalAmount":"","goals":2,"score":98,"lastModified":"9/10/2018","equityFixedIncome":"","subRows":[{"managerName":"","advisorName":"","clientName":"","id":"goal-14","goalName":"Car Loan","goalAmount":23000,"goals":"","equityFixedIncome":"60/40","lastModified":"9/10/2018","score":99},{"managerName":"","advisorName":"","clientName":"","id":"goal-15","goalName":"Bike Loan","goalAmount":4600,"goals":"","equityFixedIncome":"30/70","lastModified":"9/11/2021","score":96}]},{"advisorName":"","managerName":"","id":"Client 12","clientName":"Bruce Banner","goalName":"","goalAmount":"","goals":2,"score":98,"lastModified":"9/10/2018","equityFixedIncome":"","subRows":[{"managerName":"","advisorName":"","clientName":"","id":"goal-14","goalName":"Car Loan","goalAmount":23000,"goals":"","equityFixedIncome":"60/40","lastModified":"9/10/2018","score":99},{"managerName":"","advisorName":"","clientName":"","id":"goal-15","goalName":"Bike Loan","goalAmount":4600,"goals":"","equityFixedIncome":"30/70","lastModified":"9/11/2021","score":96}]},{"advisorName":"","managerName":"","id":"Client 1","clientName":"Thor Odin","goalName":"","goalAmount":"","goals":2,"score":86,"lastModified":"22/1/2022","equityFixedIncome":"","subRows":[{"managerName":"","advisorName":"","clientName":"","id":"goal-1","goalName":"Retirement1","goalAmount":10000,"goals":"","equityFixedIncome":"60/40","lastModified":"22/1/2022","score":99},{"managerName":"","advisorName":"","clientName":"","id":"goal-2","goalName":"Save For Child Education","goalAmount":70000,"goals":"","equityFixedIncome":"55/45","lastModified":"5/12/2023","score":72}]}]},{"advisorName":"Joe","managerName":"","id":"","clientName":"","goalName":"","goalAmount":"","goals":"","score":"","lastModified":"","equityFixedIncome":"","subRows":[{"advisorName":"","managerName":"","id":"Client 5","clientName":"Hack Eye","goalName":"Save For World Tour","goalAmount":400000,"goals":1,"score":74,"lastModified":"","equityFixedIncome":"60/40"},{"advisorName":"","managerName":"","id":"Client 6","clientName":"Nick Fury","goalName":"","goalAmount":"","goals":2,"score":44,"lastModified":"9/3/2022","equityFixedIncome":"","subRows":[{"managerName":"","advisorName":"","clientName":"","id":"goal-7","goalName":"To Build A Workspace","goalAmount":42340,"goals":"","equityFixedIncome":"60/40","lastModified":"9/3/2022","score":60},{"managerName":"","advisorName":"","clientName":"","id":"goal-8","goalName":"Cloud Examination","goalAmount":8730,"goals":"","equityFixedIncome":"30/70","lastModified":"9/11/2021","score":29}]},{"advisorName":"","managerName":"","id":"Client 7","clientName":"Star Lord","goalName":"Save For Child Education","goalAmount":400000,"goals":1,"score":93,"lastModified":"","equityFixedIncome":"55/45"}]}]},{"managerName":"Suresh Murugaiyan","advisorName":"","id":"","clientName":"","goalName":"","goalAmount":"","goals":"","score":"","lastModified":"","equityFixedIncome":"","subRows":[{"advisorName":"Loki","managerName":"","id":"","clientName":"","goalName":"","goalAmount":"","goals":"","score":"","lastModified":"","equityFixedIncome":"","subRows":[{"advisorName":"","managerName":"","id":"Client 13","clientName":"Yondu","goalName":"","goalAmount":"","goals":2,"score":98,"lastModified":"9/10/2018","equityFixedIncome":"","subRows":[{"managerName":"","advisorName":"","clientName":"","id":"goal-14","goalName":"Car Loan","goalAmount":23000,"goals":"","equityFixedIncome":"60/40","lastModified":"9/10/2018","score":99},{"managerName":"","advisorName":"","clientName":"","id":"goal-15","goalName":"Bike Loan","goalAmount":4600,"goals":"","equityFixedIncome":"30/70","lastModified":"9/11/2021","score":96}]}]}]},{"managerName":"Rohan","advisorName":"","id":"","clientName":"","goalName":"","goalAmount":"","goals":"","score":"","lastModified":"","equityFixedIncome":"","subRows":[{"advisorName":"Pal","managerName":"","id":"","clientName":"","goalName":"","goalAmount":"","goals":"","score":"","lastModified":"","equityFixedIncome":"","subRows":[{"advisorName":"","managerName":"","id":"Client 8","clientName":"Thanos","goalName":"","goalAmount":"","goals":3,"score":29,"lastModified":"2/11/2019","equityFixedIncome":"","subRows":[{"managerName":"","advisorName":"","clientName":"","id":"goal-10","goalName":"Relocation Expense Goal","goalAmount":400000,"goals":"","equityFixedIncome":"22/78","lastModified":"2/11/2019","score":29},{"managerName":"","advisorName":"","clientName":"","id":"goal-11","goalName":"Save for to buy bike","goalAmount":400000,"goals":"","equityFixedIncome":"50/50","lastModified":"1/1/2020","score":29},{"managerName":"","advisorName":"","clientName":"","id":"goal-12","goalName":"Save For Education","goalAmount":400000,"goals":"","equityFixedIncome":"65/35","lastModified":"9/5/2022","score":29}]},{"advisorName":"","managerName":"","id":"Client 9","clientName":"Ego","goalName":"Save For Education","goalAmount":400000,"goals":1,"score":72,"lastModified":"","equityFixedIncome":"65/35"},{"advisorName":"","managerName":"","id":"Client 10","clientName":"Bruce Banner","goalName":"","goalAmount":"","goals":2,"score":98,"lastModified":"9/10/2018","equityFixedIncome":"","subRows":[{"managerName":"","advisorName":"","clientName":"","id":"goal-14","goalName":"Car Loan","goalAmount":23000,"goals":"","equityFixedIncome":"60/40","lastModified":"9/10/2018","score":99},{"managerName":"","advisorName":"","clientName":"","id":"goal-15","goalName":"Bike Loan","goalAmount":4600,"goals":"","equityFixedIncome":"30/70","lastModified":"9/11/2021","score":96}]}]}]}]

推荐答案

您需要首先按managerName分组,然后,对于每个经理,将他们的顾问按advisorName分组.

  • 定义一个通用帮助器函数,该函数接受一个数组和一个属性名称,以按其值对项进行分组.如果使用Array#reduce,则在更新Map时迭代数组,其中键是属性值(例如经理姓名),值是具有此值的对象列表.之后,使用Array#mapObject#asign,它将以对象数组的形式返回分组的对,每个对象数组都是一个row的模板,带有属性(Key)和subRow(值).
  • 有了与您共享的对象类似的对象数组,我们首先需要使用上面的辅助对象按managerName对它们进行分组.在此之后,使用Array#forEach迭代每个管理器,我们也需要使用上面的助手将其顾问分组到subRows中,但这次是advisorName.
const _groupBy = (arr = [], prop) => {
  const row = {
    managerName: "",
    advisorName: "",
    clientName: "",
    id: "",
    goalName: "",
    goalAmount: "",
    goals: "",
    score: "",
    lastModified: "",
    equityFixedIncome: ""
  };
  const map = arr.reduce(
    (map, { [prop]: propToGroupBy, ...props }) =>
      map.set(propToGroupBy, [
        ...(map.get(propToGroupBy) ?? []),
        { [prop]: "", ...props }
      ]),
    new Map()
  );
  return [...map.entries()].map(([propToGroupBy, subRows]) =>
    Object.assign({}, row, {
      [prop]: propToGroupBy,
      subRows
    })
  );
};

const groupData = (arr = []) => {
  const managerList = _groupBy(arr, "managerName");
  managerList.forEach((manager) => {
    manager.subRows = _groupBy(manager.subRows, "advisorName");
  });
  return managerList;
};

Javascript相关问答推荐

如何判断属于多个元素的属性是否具有多个值之一

通过使用100%间隔时间来代表我们还剩多少时间来倒计时

单击子元素时关闭父元素(JS)

调用removeEvents不起作用

useNavigation更改URL,但不呈现或显示组件

分层树视图

如何通过使用vanilla JS限制字体大小增加或减少两次来改变字体大小

我的角模板订阅后不刷新'

Html文件和客户端存储的相关问题,有没有可能?

我创建了一个创建对象的函数,我希望从该函数创建的对象具有唯一的键.我怎么能做到这一点?

WhatsApp Cloud API上载问题:由于MIME类型不正确而导致接收&Quot;INVALID_REQUEST";错误

更改预请求脚本中重用的JSON主体变量- Postman

Vaadin定制组件-保持对javascrip变量的访问

Phaserjs-创建带有层纹理的精灵层以自定义外观

如何在Jest中模拟函数

是否设置以JavaScript为背景的画布元素?

$GTE的mongoose 问题

当达到高度限制时,如何裁剪图像?使用html和css

如何将PNG图像放在wix站点的Open Streemap map 上,使PNG图像成为 map 不可分割的一部分?

使用Firebase实时数据库`update`在同一 node 上执行多个更新