Есть ли способ сократить запись?
Есть к примеру фейковый массив который к примеру получен с базы данных :
Код:
let obj = [{ name: "", average: "", cpu: "", price: "",},{ name: "", average: "", cpu: "", price: "",},{ name: "", average: "", cpu: "", price: "",},{ name: "", average: "", cpu: "", price: "",}] Код:
<div data-name="" data-average="" data-cpu="" data-price=""></div> Код:
for(const inf of obj){ |
Способ называется цикл, лол.)
for(const inf of obj){ let d = document.createElement("div"); for(const key in inf){ d.setAttribute("data-" + key, inf[key]); } console.log(d); } или let divs = obj.map(inf => { let d = document.createElement("div"); Object.entries(inf).forEach( ([key, value]) => d.setAttribute(`data-${key}`, value) ); console.log(d); return d; }); |
Цитата:
Для себя увидел новое .. Огромное спасибо |
Вместо
d.setAttribute(`data-${key}`, value) можно d.dataset[key] = value; |
maxim1978,
for(const inf of obj){ let d = document.createElement("div"); Object.assign(d.dataset, inf); } |
maxim1978,
<!DOCTYPE HTML> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <style type="text/css"> div:after { content: attr(data-price); } </style> </head> <body> <script> let obj = [{ name: "", average: "", cpu: "", price: "1", }, { name: "", average: "", cpu: "", price: "2", }, { name: "", average: "", cpu: "", price: "3", }, { name: "", average: "", cpu: "", price: "4", }] for (const inf of obj) { let d = document.createElement("div"); Object.assign(d.dataset, inf); document.body.append(d); } </script> </body> </html> |
Часовой пояс GMT +3, время: 10:16. |