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)
我对你所问的有点困惑,你在底部提出的问题似乎与问题标题不一致。