Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.04.2023, 07:02
Аспирант
Отправить личное сообщение для maxim1978 Посмотреть профиль Найти все сообщения от maxim1978
 
Регистрация: 07.05.2019
Сообщений: 40

Есть ли способ сократить запись?
Есть к примеру фейковый массив который к примеру получен с базы данных :
Код:
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){
  let d = document.createElement("div");
  d.setAttribute("data-name", inf.name);
  d.setAttribute("data-average", inf.average);
  d.setAttribute("data-cpu", inf.cpu);
  d.setAttribute("data-price", inf.price);
  
  console.log(d)
}
Вот именно вот это меня напрягает, есть ли способ в javascript который позволит не писать 100500 раз d.setAttribute (в случае если всё таки будет не 4 поля а скажем больше 20 или 30) как это написать сокращённо ... ?
Ответить с цитированием
  #2 (permalink)  
Старый 04.04.2023, 07:10
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,583

Способ называется цикл, лол.)
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;
});
__________________
29375, 35
Ответить с цитированием
  #3 (permalink)  
Старый 04.04.2023, 07:12
Аспирант
Отправить личное сообщение для maxim1978 Посмотреть профиль Найти все сообщения от maxim1978
 
Регистрация: 07.05.2019
Сообщений: 40

Сообщение от Aetae Посмотреть сообщение
Способ называется цикл, лол.)
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;
});
Второй метод мне понравился ... спасибо .. работает
Для себя увидел новое ..
Огромное спасибо
Ответить с цитированием
  #4 (permalink)  
Старый 04.04.2023, 07:41
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,743

Вместо
d.setAttribute(`data-${key}`, value)
можно
d.dataset[key] = value;
Ответить с цитированием
  #5 (permalink)  
Старый 04.04.2023, 09:29
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,108

maxim1978,
for(const inf of obj){
    let d = document.createElement("div");
    Object.assign(d.dataset, inf);
    }
Ответить с цитированием
  #6 (permalink)  
Старый 04.04.2023, 09:34
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,108

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>
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка Unexpected token ILLEGAL если есть перенос строки в тексте kuchuluk Серверные языки и технологии 9 25.08.2014 22:52
Store - просто удалить запись Infarch ExtJS 1 12.08.2014 17:46
Найти и отметить radio с определенным id, если radio с этим id есть. Globus Общие вопросы Javascript 2 15.04.2014 20:41
Как вы относитесь к наркоманам? Maxmaxmaximus7 Оффтопик 7 05.02.2014 13:29
глюк форума Gvozd Сайт Javascript.ru 11 18.03.2009 14:37