Функция парсит объекты и заполняет ячейки, если ключ / заголовок не найден (выделенные столбцы) – возвращает прочёрк.
Итак, как же работает это чудо –
1) мы не можем сразу превратить в объект то, что в строке у Владимира, чтобы структура
{}, {}, ... стала валидной – добавляем внешний массив, то есть добавим[ и ] к текстовой строке;`[${r}]`2) структура ОК, но это по прежнему простая текстовая строка – сделаем из неё объект;
JSON.parse(`[${r}]`)4) дальше
map – цикл по вложенным объектам и внутри каждого объекта – еще один map – по ячейкам заголовков, мы проверяем, есть ли в текущем объекте текущий ключ, если есть – достаём значение, если нет – возвращаем прочерк;map всегда возвращает массив первоначальной структуры, в нашем случае это отлично – мы создаём нужный нам массив просто подменяя структуру массивов, которые обходим;
Функция целиком:
function JsonToTable(r, head) {
return JSON.parse(`[${r}]`)
.map(object => {
return head[0].map(h => object[h] ?? '-' )})
}Таблица с примером