Правильный способ итерации по двумерному 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);
}
}