@grisha228

Возможно ли решить такую задачу без вложенного цикла?

Добрый день!
Возник вопрос возможно ли избежать вложенного цикла в данной задачи и как это можно сделать?

Дан массив, он может быть очень большим:
const message = [{id:1, name:"two", address:"add"},{id:1, name:"two", address:"add"},{id:1, name:"two", address:"add"},{id:1, name:"two", address:"add"},{id:1, name:"two", address:"add"},{id:1, name:"two", address:"add"}]
const header = ["id","name", "address"]
for(let i = 0; i < message.length; i++){
  for(let j = 0; j < header.length; j++){
    console.log(message[i][header[j]])
  }
}


Задача:
Вывести на страницу таблицу.
Заголовки таблицы являются ключи первого элемента message[0]
А внутри тела таблицы, выводятся данные из всех элементов массива.
Выполнить задачу как O(n)
  • Вопрос задан
  • 142 просмотра
Решения вопроса 1
Rst0
@Rst0
Отвечая на вопрос:
Возник вопрос возможно ли избежать вложенного цикла в данной задачи и как это можно сделать?

возможно:
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 ...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы