Как создать многомерный массив в JavaScript

Проблема с группировкой данных в многомерный массив

Я получаю данные через ajax запрос и парсю их в JavaScript объект:

var parsedData = JSON.parse(responseData);

У меня есть массив из 20 объектов, где каждый объект содержит значения, которые нужно сгруппировать по ID вопроса в многомерный массив.

Пробую создать структуру данных так:

var answersGroup = {};
for(var j=0; j<3; j++){
  answersGroup[itemId][j] = {
    'itemId': parsedData[key].choice.choiceId,
    'title': parsedData[key].choice.text,
    'description': parsedData[key].item.text,
    'response': parsedData[key].answer,
    'category': categoryName,
    'responseId': parsedData[key].responseId
  }
};

Но получаю ошибку при попытке записать данные. Если убираю вложенный индекс [j], то сохраняется только последнее значение для каждого ID.

Пример данных:

{
  responseId: 968,
  choice: {
    text: "Да",
    choiceId: 8
  },
  item: {
    text: "Имя врача",
    itemId: 43,
    type: "TEXT"
  },
  answer: "Иванов"
}

Как правильно создать многомерный массив для группировки значений по ID?

Еще момент - у тебя itemId в цикле, но непонятно откуда он. Попробуй так:

var answersGroup = {};
parsedData.forEach(function(item) {
  var id = item.item.itemId;
  if (!answersGroup[id]) answersGroup[id] = [];
  answersGroup[id].push({
    itemId: item.choice.choiceId,
    title: item.choice.text,
    // остальные поля
  });
});

Проще и без лишних циклов.

используй reduce для группировки - он идеально для этого подходит:

var grouped = parsedData.reduce(function(acc, item) {
  var key = item.item.itemId;
  if (!acc[key]) acc[key] = [];
  acc[key].push({
    itemId: item.choice.choiceId,
    title: item.choice.text,
    description: item.item.text,
    response: item.answer
  });
  return acc;
}, {});

Получишь структуру где каждый ключ - itemId, а значение - массив связанных объектов. reduce всё сделает сам.

Проблема в том, что ты не инициализируешь answersGroup[itemId]. Сначала создай пустой массив: if (!answersGroup[itemId]) { answersGroup[itemId] = ; }. Потом уже пиши данные через push() или по индексу. Иначе обращаешься к несуществующему свойству.