RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

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

如何向下拉列表标题添加唯一属性?

  • 772

我有这样的数组。

const A = [{category: "Walls", id: "1"}, {category: "Walls", id: "2"}];  //first array

const B = [{category: "Window", id: "3"}, {category: "Walls", id: "4"}]; //second array

const C = [{category: "Walls", id: "5"}, {category: "Floor", id: "6"}]; //three array

const D = [{category: "Walls", id: "5"}, {category: "Walls", id: "6"}]; //four array

我需要创建一个这样的列表:

<details>
<summary>Walls</summary>
	<button class="A">1</button>
	<button class="A">2</button>
	<button class="B">4</button>
	<button class="B">5</button>
	<button class="C">5</button>
	<button class="D">6</button>
</details>
<details>
	<summary>Window</summary>
	<button class="B">3</button>
</details>
<details>
	<summary>Floor</summary>
	<button class="D">6</button>
</details>

问题是我不明白如何将必要的数据从 js 数组添加到 html 页面。我将非常感谢您的帮助。

javascript
  • 2 2 个回答
  • 10 Views

2 个回答

  • Voted
  1. meine
    2020-06-11T19:18:35Z2020-06-11T19:18:35Z

    我希望我能正确理解你的需要)

    const array = [
      {
        'category': [
          {
            'name': 'Walls',
            'items': [
              {
                'id': '1'
              },
              {
                'id': '2'
              }
            ]
          },
          {
            'name': 'Window',
            'items': [
              {
                'id': '3'
              },
              {
                'id': '4'
              }
            ]
          },
          {
            'name': 'Walls',
            'items': [
              {
                'id': '5'
              },
              {
                'id': '6'
              }
            ]
          },
          {
            'name': 'Walls',
            'items': [
              {
                'id': '7'
              },
              {
                'id': '8'
              }
            ]
          }
        ]
      }
    ]
    
    array[0].category.map((category, index) => {
      const categoryNode = `
        <details>
            <summary>${category.name}</summary>
        </details>
      `
      
      document.querySelector('#root').innerHTML += categoryNode;
    });
    
    [...document.querySelectorAll('details')].forEach(details => {
      const node = document.querySelector('#root');
      const detailsIndex = [...node.children].indexOf(details);
      
      array[0].category[detailsIndex].items.map((item, index) => {
        const itemNode = `
          <button class="${item.id}">${item.id}</button>
        `
        
        document.querySelectorAll('details')[detailsIndex].innerHTML += itemNode;
      });
    });
    <div id="root"></div>

    • 2
  2. Best Answer
    Mikalai Parakhnevich
    2020-06-11T19:30:59Z2020-06-11T19:30:59Z

    如果你稍微改变输入数据的格式,那么你可以这样做:

    var mas = [{
        key: "A",
        "value": [{
            category: "Walls",
            family: "Basic Walls",
            id: "1"
          },
          {
            category: "Walls",
            family: "Basic Walls",
            id: "2"
          },
          {
            category: "Walls",
            family: "Second Walls",
            id: "22"
          },
          {
            category: "Walls",
            family: "Second Walls",
            id: "23"
          },
        ]
      },
      {
        key: "B",
        "value": [{
            category: "Window",
            family: "Basic Window",
            id: "3"
          },
          {
            category: "Walls",
            family: "Basic Walls",
            id: "4"
          }
        ]
      },
      {
        key: "C",
        "value": [{
            category: "Walls",
            family: "Basic Walls",
            id: "5"
          },
          {
            category: "Floor",
            family: "Basic Floor",
            id: "6"
          }
        ]
      },
      {
        key: "D",
        "value": [{
            category: "Walls",
            family: "Basic Walls",
            id: "5"
          },
          {
            category: "Walls",
            family: "Basic Walls",
            id: "6"
          }
        ]
      }
    ];
    
    var newarr = [];
    var output = {};
    
    mas.forEach(function(element, key) {
      element.value.forEach(function(oneelement, onekey) {
        if (output[oneelement.category] === undefined) output[oneelement.category] = {};
        if (output[oneelement.category][oneelement.family] === undefined) output[oneelement.category][oneelement.family] = [];
        output[oneelement.category][oneelement.family].push({
          clas: element.key,
          val: oneelement.id
        });
      });
    });
    
    Object.keys(output).map(function(objectKey, index) {
      var category = output[objectKey];
      var caption = '<details class="list_' + index + '"><summary>' + objectKey + '</summary></details>';
    
      document.querySelector('.list').innerHTML += caption;
    
      var all = '';
      Object.keys(category).map(function(vaL, iX) {
    
        var summary = '<details class="family_' + index + '_' + iX + '"><summary>' + vaL + '</summary></details>';
        document.querySelector('.list_' + index).innerHTML += summary;
        all = '';
        output[objectKey][vaL].forEach(function(val, key) {
          all = all + '<button class="' + val.clas + '">' + val.val + '</button>';
        });
        document.querySelector('.family_' + index + '_' + iX).innerHTML += all;
      });
    
    });
    body{font-family:tahoma;font-size:18px}
    details details{margin-left:15px}
    .list {max-width:400px;background:#eee;padding:15px}
    <div class="list"></div>

    PS:我更改了答案以满足您的要求,但我想注意这仅适用于特殊情况,如您所见,代码的大小随着嵌套的每一级而增长。对于未来,我建议您使用平面对象作为输入。

    • 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