【问题标题】:Facing issue with Javascript arrayJavascript数组面临问题
【发布时间】:2022-01-18 06:51:23
【问题描述】:

我正在从服务中获取一组对象数据,如下所示: 输出

 array=   [
    {id:1,Name:GHI,Gender:Male,DOB:12/1/2020},
    {id:1,Name:GHI,Gender:Female,DOB:10/1/2020},
    {id:2,Name:ABC,Gender:Male,DOB:02/02/2020},
    {id:2,Name:ABC,Gender:Female,DOB:03/04/2019},
    {id:3,Name:EFG,Gender:Male,DOB:09/09/2010},
    {id:3,Name:EFG,Gender:Female,DOB:08/07/2021}
    ]

我已经应用了 group By 函数并使用 Key 进行映射

  let key="id";

    const groupBy=(array,key)=>{
    return Object.entries(array.reduce((result,currentvalue)=>{
    (result[currentValues[key]]=result[currentValue[key]]||[]).push(
    currentvalue
    );
    return result;
    },{})).map(v=>({[key]:v[0],data:v[1]})));
    };

我可以得到这样的数据

[
{
Id:1,
data:
   [
    {id:1,Name:GHI,Gender:Male,DOB:12/1/2020},
    {id:1,Name:GHI,Gender:Female,DOB:10/1/2020}
  ]
},
{
Id:2,
data:
   [
   {id:2,Name:ABC,Gender:Male,DOB:02/02/2020},
   {id:2,Name:ABC,Gender:Female,DOB:03/04/3019}
   ]
}...
]

但我需要这样的输出,我需要按 Id 分组,但需要这样的 Id 名称

[
 {
  Name:GHI,
  data:[
    {id:1,Name:GHI,Gender:Male,DOB:12/1/2020},
    {id:1,Name:GHI,Gender:Female,DOB:10/01/2020}
   ]
 },
 {
  Name:ABC,
  data:[
      {id:2,Name:ABC,Gender:Male,DOB:02/02/2020},
      {id:2,Name:ABC,Gender:Female,DOB:03/04/2019}
    ]
 },
 {
  Name:EFG,
  data:[
     {id:3,Name:EFG,Gender:Male,DOB:09/09/2010},
     {id:3,Name:EFG,Gender:Male,DOB:08/07/2021}
     ]
 }
]

请告诉我如何以预期格式检索数据以显示在 UI 上。

【问题讨论】:

  • 把key改成name?
  • 您删除所有字符串引号是否有原因?当您提供不会引发错误的有效数据时,帮助肯定会容易得多
  • 如果我们把key改成name,那么item是按name而不是Id排序的。我需要按id排序但是显示name。

标签: javascript jquery typescript javascript-objects


【解决方案1】:

你可能会更简单,更易读:

let result = {};
for (const data of array) {
  const { Name } = data; 
  if (!result[Name]) {
    result[Name] = { Name, data: [data] };
  } else {
    result[Name].data.push(data);
  }
}

【讨论】:

    【解决方案2】:

    试试下面的代码。

        var arr =   [
        {id:1,Name:"GHI",Gender:"Male",DOB:"12/1/2020"},
        {id:1,Name:"GHI",Gender:"Female",DOB:"10/1/2020"},
        {id:2,Name:"ABC",Gender:"Male",DOB:"02/02/2020"},
        {id:2,Name:"ABC",Gender:"Female",DOB:"03/04/2019"},
        {id:3,Name:"EFG",Gender:"Male",DOB:"09/09/2010"},
        {id:3,Name:"EFG",Gender:"Female",DOB:"08/07/2021"}
        ]
    
    let temp = {}
    arr.forEach((obj) => {
        temp[obj.Name] = temp[obj.Name] || [];
        temp[obj.Name].push(obj);
    });
    
    let output = Object.entries(temp).map(obj => {
       return {"Name": obj[0], "data": obj[1]}
    });
    
    console.log(JSON.stringify(output, null, 2));

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-26
      • 2012-01-29
      • 1970-01-01
      • 1970-01-01
      • 2020-07-09
      • 2020-12-04
      • 1970-01-01
      相关资源
      最近更新 更多