Как преобразовать массив объектов в пользовательский сгруппированный массив - PullRequest
1 голос
/ 06 ноября 2019

Я пытаюсь преобразовать объект данных в пользовательский формат

Это мои данные, которые я хочу преобразовать

[
  { 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 по свойству

любые предложения будут полезны.

1 Ответ

2 голосов
/ 06 ноября 2019

Принимая массив объектов в качестве набора результатов, вы можете взять хеш-таблицу с массивами и взять плоский массив в качестве набора результатов.

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; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...