【问题标题】:How to convert array of objects into custom grouped array如何将对象数组转换为自定义分组数组
【发布时间】:2019-11-06 07:44:02
【问题描述】:

我正在尝试将数据对象转换为自定义格式

这是我要转换的数据

[
  { Name: 15, GroupID: 1, Id: 1 },
  { Name: 16, GroupID: 1, Id: 1 },
  { Name: 17, GroupID: 2, Id: 2 },
  { Name: 18, GroupID: 2, Id: 2 },
  { Name: 15, GroupID: 3, Id: 3 },
  { Name: 16, GroupID: 3, Id: 3 },
  { Name: 17, GroupID: 4, Id: 4 },
  { Name: 18, GroupID: 4, Id: 4 }
];

这就是我想要实现的目标

  { GroupID: 1 },

  { Name: 15, Id: 1 },
  { Name: 16, Id: 1 },

  { GroupID: 2 },

  { Name: 17, Id: 2 },
  { Name: 18, Id: 2 },

  { GroupID: 3 },

  { Name: 15, Id: 3 },
  { Name: 16, Id: 3 },

  { GroupID: 4 },

  { Name: 17, Id: 4 },
  { Name: 18, Id: 4 }

这是我到目前为止尝试过的

var data = [
  { Name: 15, GroupID: 1, Id: 1 },
  { Name: 16, GroupID: 1, Id: 1 },
  { Name: 17, GroupID: 2, Id: 2 },
  { Name: 18, GroupID: 2, Id: 2 },
  { Name: 15, GroupID: 3, Id: 3 },
  { Name: 16, GroupID: 3, Id: 3 },
  { Name: 17, GroupID: 4, Id: 4 },
  { Name: 18, GroupID: 4, Id: 4 }
];

var previousGroupId;
var newObject = new Object();
for (index in data) {
  var groupId = data[index].GroupID;
  if (groupId != previousGroupId) {
    var newGroup = "GroupId" + groupId;
    newObject[newGroup] = new Array();
    for (index in data) {
      if (data[index].GroupID == groupId) {
        var customObject = {
          "GroupID": groupId,
          "Name": data[index].Name,
          "Id": data[index].Id
        };
        newObject[newGroup].push(customObject);
      }
    }
  }
  previousGroupId = groupId;
}

console.log(newObject);

即使我试图参考这个 Javascript group objects by property

任何建议都会有所帮助。

【问题讨论】:

  • 请添加所有代码,您尝试了这个问题。想要的结果是一个数组吗?请编辑它以获得有效的数据结构。
  • 我已经通过 jsfiddle 添加了所有代码,我将编辑 ds 以使其更清晰
  • 这是一个数组吗?

标签: javascript arrays object grouping


【解决方案1】:

假设一个对象数组作为结果集,您可以将一个包含数组的哈希表和一个平面数组作为结果集。

var data = [{ Name: 15, GroupID: 1, Id: 1 }, { Name: 16, GroupID: 1, Id: 1 }, { Name: 17, GroupID: 2, Id: 2 }, { Name: 18, GroupID: 2, Id: 2 }, { Name: 15, GroupID: 3, Id: 3 }, { Name: 16, GroupID: 3, Id: 3 }, { Name: 17, GroupID: 4, Id: 4 }, { Name: 18, GroupID: 4, Id: 4 }],
    result = Object
        .values(data.reduce((r, { Name, GroupID, Id }) => {
            r[GroupID] = r[GroupID] || [{ GroupID }];
            r[GroupID].push({ Name, Id });
            return r;
        }, {}))
        .flat();

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

  • 我正要发布几乎相同的解决方案 .... 与 data.reduce((r, { GroupID, ...rest }) ... 和 ... r[GroupID].push({ ...rest });
  • @Bravo 或只是 r[GroupID].push(rest)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-20
  • 2023-03-11
  • 2021-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多