javascript - 从 json 响应创建列表菜单

标签 javascript jquery html json

我正在开发一个项目,我正在获取下面的 JSON 输出,并希望从中创建一个菜单。使用 JavaScript 具有父菜单和子菜单的组:

myArray = [
  {group: "one", color: "red"},
  {group: "two", color: "blue"},
  {group: "one", color: "green"},
  {group: "one", color: "black"}
]

我想要下面的 html 输出

One
  red
  green
  black
Two
  blue
<ul class="nested">one
  <li><a href=“red”>red</li>
  <li><a href=“green”>green</li>
  <li><a href=“black”>black</li>
</ul>
<ul class="nested">two
  <li><a href=“blue”>blue</li>
</ul>

最佳答案

这里的第一步是通过 group 属性对数组进行键控。我会做这样的事情:

let keyedMenu = {};
myArray.forEach((item) => {
  if (!keyedMenu[item.group]) {
    keyedMenu[item.group] = [];
  }
  keyedMenu[item.group].push(item);
});

现在您的数据结构如下所示:

{
  one: [
    { group: 'one', color: 'red' },
    { group: 'one', color: 'green' },
    { group: 'one', color: 'black' }
  ],
  two: [ 
    { group: 'two', color: 'blue' }
  ]
}

下一步是从此数据结构创建标记:

let markup = ``;
Object.keys(keyedMenu).forEach((key) => {
  markup += `<ul class="nested">${ key }`;

  keyedMenu[key].forEach((item) => {
    markup += `<li><a href="${ item.color }">${ item.color }</a></li>`;
  });

  markup += `</ul>`;
});

最后,您需要将此标记注入(inject)到 DOM 中:

$('target-element-selector').html(markup);

关于javascript - 从 json 响应创建列表菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58174279/

相关文章:

javascript - 使用 Vue 从 Web API 获取数据

javascript - 在 url 上添加部分时无法识别 Cookie(Javascript)

javascript - 将 Vue 与 Django 一起使用

javascript - 主干 - 未定义的请求正文

javascript - 从表单字段构建在新窗口中打开的 URL

javascript - window.document.write 的 jQuery 等价物

html - 我如何用HTML播放在线广播

html - VSCode Emmet 标识不能正确处理 Svelte 文件

javascript - IE 上的应用缓存,Edge 在关闭浏览器后无法工作

jquery - 实现 Google URL 缩短 API 时出现跨域问题