Javascript 如何基于同级值增加对象值?

Javascript 如何基于同级值增加对象值?,javascript,html,arrays,Javascript,Html,Arrays,我正在尝试设置目录列表的样式 我正在处理这样一个物体 const toc = [ { anchor: "web-dev", level: 3, text: "Web dev" }, { anchor: "ww2", level: 3, text: "WW2" }, { anchor: "something", level: 4, text: "something"

我正在尝试设置目录列表的样式

我正在处理这样一个物体

const toc = [
  { anchor: "web-dev", level: 3, text: "Web dev" },
  { anchor: "ww2", level: 3, text: "WW2" },
  { anchor: "something", level: 4, text: "something" },
  { anchor: "lists", level: 4, text: "Lists" },
  { anchor: "books", level: 4, text: "Books" },
  { anchor: "other-books", level: 4, text: "Other books" },
  { anchor: "more-books", level: 3, text: "more books" },
];
目前,我创造了这个很好的工作

  toc.forEach(function (entry) {
    entry.level = entry.level == 1 ? 0 : entry.level;
    entry.level = entry.level == 2 ? 5 : entry.level;
    entry.level = entry.level == 3 ? 10 : entry.level;
    entry.level = entry.level == 4 ? 15 : entry.level;
    entry.level = entry.level == 5 ? 20 : entry.level;
    entry.level = entry.level == 6 ? 25 : entry.level;
    tocHTML += `<li style="margin-left: ${1 * (10 + entry.level)}px"> </li>`;
  });
toc.forEach(函数(条目){
entry.level=entry.level==1?0:entry.level;
entry.level=entry.level==2?5:entry.level;
entry.level=entry.level==3?10:entry.level;
entry.level=entry.level==4?15:entry.level;
entry.level=entry.level==5?20:entry.level;
entry.level=entry.level==6?25:entry.level;
tocHTML+=`li style=“左边距:${1*(10+entry.level)}px”>`;
});
但是有没有办法说,如果没有
条目。级别
1或2,那么级别3不应该有填充,依此类推

  • 乘以1的目的是什么
  • 你有一只虫子。如果
    级别===2
    ,则边距始终为
    30px
    。因为有两个条件,分别是
    ==2
    ==5
  • 您可能正在查找以下代码:
  • 函数主播HTML(主播){
    const minLevel=Math.min(…anchors.map({level})=>level));
    返回锚
    //将对象定位到HTML标记字符串
    .map(a=>anchorToTag(a,minLevel))
    //将标签连接在一起
    .加入(“”)
    }
    函数anchorToTag({anchor,level,text},minLevel){
    常量缩进=10+(级别-最小级别)*5;
    返回(
    `
  • ` ) } 常数toc=[ {主播:“web开发”,级别:3,文本:“web开发”}, {主播:“ww2”,级别:3,文本:“ww2”}, {锚定:“某物”,级别:4,文本:“某物”}, {锚定:“列表”,级别:4,文本:“列表”}, {主播:“书籍”,级别:4,文本:“书籍”}, {主播:“其他书籍”,级别:4,文本:“其他书籍”}, {主播:“更多书籍”,级别:3,文本:“更多书籍”}, ]; document.getElementById('container').innerHTML=anchorsToHtml(toc)
    首先获取最低液位值,然后边走边减去

    const toc=[
    {主播:“web开发”,级别:3,文本:“web开发”},
    {主播:“ww2”,级别:3,文本:“ww2”},
    {锚定:“某物”,级别:4,文本:“某物”},
    {锚定:“列表”,级别:4,文本:“列表”},
    {主播:“书籍”,级别:4,文本:“书籍”},
    {主播:“其他书籍”,级别:4,文本:“其他书籍”},
    {主播:“更多书籍”,级别:3,文本:“更多书籍”},
    ];
    常量getItems=(toc)=>{
    const minLevel=toc.reduce((a,v)=>(a>v.level)?a=v.level:a,999);
    返回toc.map(t=>`
    
  • ${t.text}(${t.level-minLevel})
  • `).加入(“”); } document.querySelector('ul').innerHTML=getItems(toc)
    .level0{
    颜色:红色;
    }
    .1级{
    左边距:30px;
    }
    .2级{
    左边距:20px;
    }
    .3级{
    左边距:30px;
    }
    .4级{
    左边距:40px;
    }

    如果您只想缩进所选的特定级别,并通过每个包含级别的一个选项卡缩进(因此,如果它们都是
    1
    3
    6
    ,那么
    3
    将从
    1
    缩进一个缩进,而
    6
    将进一步缩进一步,那么您可能希望对唯一级别进行排序,并使用该列表中的索引进行进一步计算。可能看起来是这样的:

    const tocLis=(
    toc,
    levels=[…新集合(toc.map(({level}=>level))].sort((a,b)=>a-b)
    )=>toc.map(条目=>`
  • ${entry.text}
  • `).join(“”) const-toc=[{anchor:“web开发”,level:3,text:“web开发”},{anchor:“ww2”,level:3,text:“ww2”},{anchor:“某物”,level:4,text:“列表”},{anchor:“书籍”,level:4,text:“其他书籍”},{anchor:“更多书籍”,level:3,text:“更多书籍”}] 控制台日志(tocLis(toc))
    //tocHTML+=tocLis(toc)
    我对你所问的有点困惑,你在底部提出的问题似乎与问题标题不一致。