RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 992774
Accepted
Alisa Bondarchuk
Alisa Bondarchuk
Asked:2020-06-14 20:27:40 +0000 UTC2020-06-14 20:27:40 +0000 UTC 2020-06-14 20:27:40 +0000 UTC

如何添加课程?

  • 772

我有一个创建下拉列表的代码。我需要根据这个按钮的id所在的数组给每个按钮添加一个类。那些。数组“A”和“B”中的按钮需要添加类“A”和“B”,而数组“C”和“D”中的按钮可以添加一个公共类。

    const A = [
      { category: "Walls", id: "1", symbol: "Wall_102", family: "Basic Walls" },
      { category: "Walls", id: "2", symbol: "Wall-Ext_102", family: "Basic Walls" }
    ];
    const B = [
      {
        category: "Window",
        id: "3",
        symbol: "Window-Ext_102",
        family: "Basic Window"
      },
      {
        category: "Walls",
        id: "4",
        symbol: "Wall-Other-102",
        family: "Other Walls"
      }
    ];
    const C = [
      { category: "Walls", id: "5", symbol: "Wall-Ext_102", family: "Basic Walls" },
      { category: "Floor", id: "6", symbol: "Floor-Ext_102", family: "Basic Floor" }
    ];
    const D = [
      { category: "Walls", id: "5", symbol: "Wall-Ext_102", family: "Basic Walls" },
      { category: "Walls", id: "6", symbol: "Wall-Ext_102", family: "Basic Walls" }
    ];

    const data = [...A, ...B, ...C, ...D];

    const result = data.reduce(
      (acc, curr) => {
        const { category, family, symbol, id } = curr;
        acc.category[category] = acc.category[category] || { family: {} };
        acc.category[category].family[family] = acc.category[category].family[
          family
        ] || { symbol: {} };
        acc.category[category].family[family].symbol[symbol] = acc.category[
          category
        ].family[family].symbol[symbol] || { id: [] };
        acc.category[category].family[family].symbol[symbol].id.push(id);
        return acc;
      },
      { category: {} }
    );

    let html = "";

    for (let categoryKey in result.category) {
      html += `<details><summary>${categoryKey}</summary>`;

      for (let familyKey in result.category[categoryKey].family) {
        html += `<details><summary>${familyKey}</summary>`;

        for (let symbolKey in result.category[categoryKey].family[familyKey]
          .symbol) {
          let btn =
            result.category[categoryKey].family[familyKey].symbol[symbolKey];
          html += `<details><summary>${symbolKey}</summary>
            ${btn.id.map(id => `<button>${id}</button>`).join("")}
            </details>
            `;
        }
        html += `</details>`;
      }
      html += `</details>`;
    }

    document.body.innerHTML = html;

javascript
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    OPTIMUS PRIME
    2020-06-14T23:30:52Z2020-06-14T23:30:52Z

    我在有更改的地方留下了评论,其余的我没有触及(我希望我正确理解了任务):

    const A = [
      { category: "Walls", id: "1", symbol: "Wall_102", family: "Basic Walls" },
      { category: "Walls", id: "2", symbol: "Wall-Ext_102", family: "Basic Walls" }
    ];
    const B = [
      {
        category: "Window",
        id: "3",
        symbol: "Window-Ext_102",
        family: "Basic Window"
      },
      {
        category: "Walls",
        id: "4",
        symbol: "Wall-Other-102",
        family: "Other Walls"
      }
    ];
    const C = [
      { category: "Walls", id: "5", symbol: "Wall-Ext_102", family: "Basic Walls" },
      { category: "Floor", id: "6", symbol: "Floor-Ext_102", family: "Basic Floor" }
    ];
    const D = [
      { category: "Walls", id: "5", symbol: "Wall-Ext_102", family: "Basic Walls" },
      { category: "Walls", id: "6", symbol: "Wall-Ext_102", family: "Basic Walls" }
    ];
    
    /* Добавляем каждому объекту название своего класса */
    A.forEach( (e)=> {e.class = 'A'});
    B.forEach( (e)=> {e.class = 'B'});
    [...C, ...D].forEach( (e)=> {e.class = 'CD'});
    
    const data = [...A, ...B, ...C, ...D];
    
    const result = data.reduce(
      (acc, curr) => {
        const { category, family, symbol, id } = curr;
        acc.category[category] = acc.category[category] || { family: {} };
        acc.category[category].family[family] = acc.category[category].family[
          family
        ] || { symbol: {} };
        acc.category[category].family[family].symbol[symbol] = acc.category[
          category
        ].family[family].symbol[symbol] || { id: [] };
        acc.category[category].family[family].symbol[symbol].id.push(id);
        /* Рядом с id записываем и класс */
        acc.category[category].family[family].symbol[symbol].class = curr.class; 
        return acc;
      },
      { category: {} }
    );
    
    let html = "";
    
    for (let categoryKey in result.category) {
      html += `<details><summary>${categoryKey}</summary>`;
    
      for (let familyKey in result.category[categoryKey].family) {
        html += `<details><summary>${familyKey}</summary>`;
    
        for (let symbolKey in result.category[categoryKey].family[familyKey]
          .symbol) {
          let btn =
            result.category[categoryKey].family[familyKey].symbol[symbolKey];
            html += `<details><summary>${symbolKey}</summary>
              <button class="${result.category[categoryKey].family[familyKey].symbol[symbolKey].class}">
              ${btn.id.map(id => `${id}</button>`).join("")}</details>`;
        /*Выше добавлен кусок для классов*/
        }
        html += `</details>`;
      }
      html += `</details>`;
    }
    
    document.body.innerHTML = html;
    details {margin-left: 15px;}

    Ps 你Wall-Ext_102里面的按钮错了。目前尚不清楚,根据这个想法,应该有一个,或者 4 个。

    • 1

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    根据浏览器窗口的大小调整背景图案的大小

    • 2 个回答
  • Marko Smith

    理解for循环的执行逻辑

    • 1 个回答
  • Marko Smith

    复制动态数组时出错(C++)

    • 1 个回答
  • Marko Smith

    Or and If,elif,else 构造[重复]

    • 1 个回答
  • Marko Smith

    如何构建支持 x64 的 APK

    • 1 个回答
  • Marko Smith

    如何使按钮的输入宽度?

    • 2 个回答
  • Marko Smith

    如何显示对象变量的名称?

    • 3 个回答
  • Marko Smith

    如何循环一个函数?

    • 1 个回答
  • Marko Smith

    LOWORD 宏有什么作用?

    • 2 个回答
  • Marko Smith

    从字符串的开头删除直到并包括一个字符

    • 2 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5