Отвечая на вопрос:
Возник вопрос возможно ли избежать вложенного цикла в данной задачи и как это можно сделать?
возможно:
const table = document.createElement('table'),header = ["id","name", "address"],
message = [header, // <-- первый элемент
{id:1, name:"two_1", address:"add_1"},
{id:2, name:"two_2", address:"add_2"},
{id:3, name:"two_3", address:"add_3"},
{id:4, name:"two_4", address:"add_4"},
{id:5, name:"two_5", address:"add_5"},
{id:6, name:"two_6", address:"add_6"}
];
table.innerHTML =
message.map((m, i)=>`<tr>${header.map((h,j)=>(j=i?'td':'th',l=i?m[h]:h,`<${j}>${l}</${j}>`)).join('')}</tr>`).join('');
document.querySelector('body').appendChild(table); // <-- выводим таблицу ))
Заголовки таблицы являются ключи первого элемента message[0]
не совсем понятно, зачем тогда
const header ...