Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从嵌套的object-JavaScript创建无序列表树_Javascript_Html_List_Object_Dom - Fatal编程技术网

从嵌套的object-JavaScript创建无序列表树

从嵌套的object-JavaScript创建无序列表树,javascript,html,list,object,dom,Javascript,Html,List,Object,Dom,我有一个嵌套对象,如下所示: const countries = { "Europe": { "France": {}, "Spain": {} }, "America": { "North": { "USA": {}, "Canada": {} }, "South": { "Brazil": {}, "Argentina": {} } } }; 我想从中创建一个无序列表,如下所示:

我有一个嵌套对象,如下所示:

const countries = {
  "Europe": {
    "France": {},
    "Spain": {}
  },
  "America": {
    "North": {
      "USA": {},
      "Canada": {}
    },
    "South": {
      "Brazil": {},
      "Argentina": {}
    }
  }
};
我想从中创建一个无序列表,如下所示:

<ul>
  <li>
    Europe:
    <ul>
      <li>France</li>
      <li>Spain</li>
    </ul>
  </li>
  <li>
    America:
    <ul>
      <li>
        North:
        <ul>
          <li>USA</li>
          <li>Canada</li>
        </ul>
      </li>
      <li>
        South:
        <ul>
          <li>Brazil</li>
          <li>Argentina</li>
        </ul>
      </li>
    </ul>
  </li>
</ul>

您需要在每次迭代时为创建的li的内容赋值,不管如何-然后检查关联对象是否有键,如果有,则执行递归调用:

常量国家={ 欧洲:{ 法国:{}, 西班牙:{} }, 美国:{ 北:{ 美国:{}, 加拿大:{} }, 南方:{ 巴西:{}, 阿根廷:{} } } }; 函数createTreecontainer,数据{ const ul=container.appendChilddocument.createElement'ul'; 用于Object.entriesdata的常量[key,val]{ const li=ul.appendChilddocument.createElement'li'; li.textContent=key; 如果Object.keysval.length{ createTreeli,val; } } } createTreedocument.getElementById'container',国家/地区;
您需要在每次迭代时为创建的li的内容赋值,不管如何-然后检查关联对象是否有键,如果有,则执行递归调用:

常量国家={ 欧洲:{ 法国:{}, 西班牙:{} }, 美国:{ 北:{ 美国:{}, 加拿大:{} }, 南方:{ 巴西:{}, 阿根廷:{} } } }; 函数createTreecontainer,数据{ const ul=container.appendChilddocument.createElement'ul'; 用于Object.entriesdata的常量[key,val]{ const li=ul.appendChilddocument.createElement'li'; li.textContent=key; 如果Object.keysval.length{ createTreeli,val; } } } createTreedocument.getElementById'container',国家/地区;
如果性能不是一个问题,那么这可能很好。然而,如果是这样的话,当我们处理完对象时,是否值得考虑使用一个文档片段或仅仅是一个普通的innerHTML?除非有成千上万个节点,否则这不重要。在99%的情况下,性能不是问题——最好专注于干净、简短、可读的代码。浏览器只会在所有Javascript都完全完成后重新绘制。看起来我的方法是对的,但我做得太过分了,这对我来说非常困难。非常感谢,它看起来更清晰易读!如果性能不是一个问题,那么这可能很好。然而,如果是这样的话,当我们处理完对象时,是否值得考虑使用一个文档片段或仅仅是一个普通的innerHTML?除非有成千上万个节点,否则这不重要。在99%的情况下,性能不是问题——最好专注于干净、简短、可读的代码。浏览器只会在所有Javascript都完全完成后重新绘制。看起来我的方法是对的,但我做得太过分了,这对我来说非常困难。非常感谢,它看起来更清晰易读!