Правильный способ итерации по двумерному JSON

У меня есть двухмерный JSON, который выглядит так:

[[{"ID":1,"Name":"....","Ct":123, "Time":"2018-05-07T00:00:00"},
{"ID":2,"Name":"....","Ct":123, "Time":"2018-05-07T00:01:00"}],
[{"ID":3,"Name":"....","Ct":123, "Time":"2018-05-07T00:02:00"},
{"ID":4,"Name":"....","Ct":123, "Time":"2018-05-07T00:03:00"}]]

Он сериализуется из объекта C#. В любом случае я пытаюсь перебрать этот JSON, как:

for (var key in data) // first loop
{
  var item = data[key];
  for (var key2 in item) // second loop
  {
    // some code...
  }
}

Где первый цикл должен повторяться два раза: во время первой итерации второй цикл должен повторяться по двум объектам с идентификаторами 1 и 2; и во время второй итерации по объектам с идентификаторами 3 и 4.

Я предполагаю, что проблема в том, что первый цикл не имеет ключа, потому что первый цикл повторяется только один раз, а второй цикл перебирает объекты с идентификаторами 1,2,3,4.

Как я могу перебрать это как двумерную вкладку?

[РЕДАКТИРОВАТЬ]

Я сделал ошибку во время итерации во втором цикле, и это выглядело так, как будто он не повторяется. Решение выше является правильным.

2 ответа

Цикл for должен работать, но вы также можете использовать maps/forEach/for-of для перебора массивов:

var input = [
  [{"ID":1,"Name":"....","Ct":123, "Time":"2018-05-07T00:00:00"},
    {"ID":2,"Name":"....","Ct":123, "Time":"2018-05-07T00:01:00"}],
  [{"ID":3,"Name":"....","Ct":123, "Time":"2018-05-07T00:02:00"},
   {"ID":4,"Name":"....","Ct":123, "Time":"2018-05-07T00:03:00"}]
];

input.map(outElem => {
  console.log('======== outter ========');
  outElem.map(inElem => {
    console.log('======== inner ========');
    console.log(inElem.ID);
  });
});

// Output:
======== outter ========
======== inner ========
1
======== inner ========
2
======== outter ========
======== inner ========
3
======== inner ========
4

Или для каждого:

input.forEach(outElem => {
  console.log('======== outter ========');
  outElem.forEach(inElem => {
    console.log('======== inner ========');
    console.log(inElem.ID);
  });
});

Или для:

for (const outElem of input) {
  console.log('======== outter ========');
  for (const inElem of outElem) {
    console.log('======== inner ========');
    console.log(inElem.ID);
  }
}

var data = [
 [{
   "ID": 1,
   "Name": "....",
   "Ct": 123,
   "Time": "2018-05-07T00:00:00"
  },
  {
   "ID": 2,
   "Name": "....",
   "Ct": 123,
   "Time": "2018-05-07T00:01:00"
  }
 ],
 [{
   "ID": 3,
   "Name": "....",
   "Ct": 123,
   "Time": "2018-05-07T00:02:00"
  },
  {
   "ID": 4,
   "Name": "....",
   "Ct": 123,
   "Time": "2018-05-07T00:03:00"
  }
 ]
];

for (var key in data) // first loop
{
  var item = data[key];
  console.log('======== outter ========');
  for (var key2 in item) // second loop
  {
      console.log('======== inner ========');
      console.log(item[key2].ID);

  }
}

Другие вопросы по тегам