Как сгруппировать объекты массива по значению вложеннного свойства

Есть массив объектов вида:

[
  {
    "name": "Item1",    
    "content": {      
      "groupName": "One"
    }
  },
  {
    "name": "Item2",    
    "content": {      
      "groupName": "One"
    }
  },
  {
    "name": "Item1",    
    "content": {      
      "groupName": "Two"
    }
  }
]

Нужно получить результат в виде:

[
    {
        "group": "One",
        "content": [
            {
                "name": "Item1",    
                "content": {      
                    "groupName": "One"
                }
            },
            {
                "name": "Item2",    
                "content": {      
                    "groupName": "One"
                }
            },
        ]
    },
    {
        "group": "Two",
        "content": [
            {
                "name": "Item1",    
                "content": {      
                    "groupName": "Two"
                }
            }
        ]
    }
]

У меня есть примеры группировки, но не вложенного контента. А тут ума не приложу как пробежаться по вложенному объекту.


Ответы (1 шт):

Автор решения: Kroshandowski

Нашел решение, надеюсь это одно из. В любом случае может кому-то пригодится для начала.

let input = [{
    "name": "Item1",
    "content": {
      "groupName": "One"
    }
  },
  {
    "name": "Item2",
    "content": {
      "groupName": "One"
    }
  },
  {
    "name": "Item1",
    "content": {
      "groupName": "Two"
    }
  }
]

let result = [];

input.forEach(function(hash) {
  return function(a) {
    if (!hash[a.content.groupName]) {
      hash[a.content.groupName] = {
        group: a.content.groupName,
        content: []
      };
      result.push(hash[a.content.groupName]);
    }
    hash[a.content.groupName].content.push(a);
  };
}(Object.create(null)));

console.log(result);

P.S. "Спасибо" тому кто заминусовал мой вопрос, надеюсь Вы сразу родились экспертом в данной области

→ Ссылка