我有如下代码:
Chapters = [{ level: '1', content: '案例概况010000-170900', url: '案例概况010000-170900.html'},{ level: '2', content: '案例概况010100-170901', url: '案例概况010100-170901.html'},{ level: '2', content: '案例概况010200-170902', url: '案例概况010200-170902.html'},{ level: '3', content: '案例概况010201-170903', url: '案例概况010201-170903.html'},{ level: '1', content: '案例概况020000-170904', url: '案例概况020000-170904.html'},{ level: '1', content: '案例概况030000-170905', url: '案例概况030000-170905.html'},{ level: '2', content: '案例概况030100-170906', url: '案例概况030100-170906.html'}]
我想将上述代码按照 level 字段划分,改造成如下格式
Chapters = [{ level: '1', content: '案例概况010000-170900', url: '案例概况010000-170900.html', Childs: [{ level: '2', content: '案例概况010100-170901', url: '案例概况010100-170901.html', Childs: [] },{ level: '2', content: '案例概况010200-170902', url: '案例概况010200-170902.html', Childs: [{ level: '3', content: '案例概况010201-170903', url: '案例概况010201-170903.html' }] }]},{ level: '1', content: '案例概况020000-170904', url: '案例概况020000-170904.html', Childs: []},{ level: '1', content: '案例概况030000-170905', url: '案例概况030000-170905.html', Childs: [{ level: '2', content: '案例概况030100-170906', url: '案例概况030100-170906.html' }]}]
层级可能不限于 3 级,所以我能想到的是使用递归,但是尝试写了几遍均已失败告终
还望解答,万分感谢!
interface Chapter { level: string content: string url: string children?: Chapter[]}function insert(arr: Chapter[], cpt: Chapter, level = 1) { if (cpt.level === `${level}`) arr.push(cpt) else { const c = arr.find( c => c.content.slice(0, 4 + level * 2) === cpt.content.slice(0, 4 + level * 2) ) if (c === undefined) throw `无法在插入 ${JSON.stringify(cpt)}` insert((c.children ??= []), cpt, level + 1) } return arr}const newChapters = chapters.reduce<Chapter[]>((p, c) => insert(p, c), [])
因为你的数组是按照level有序排列的,所以可以直接遍历
function createTreeByList(arr, res = []) { let parents = [] arr.forEach(item => { let pindex = parents.findLastIndex(parent => +parent.level < +item.level) if(pindex < 0){ res.push(item) }else{ let parent = parents[pindex] parent.childs = parent.childs || [] parent.childs.push(item) } parents.length = pindex + 1 parents.push(item) }) return res}Chapters = aaa(Chapters)
问题内容: 我有一种方法可以为从API请求调用中接收到的对象列表计算营养素。 该方法如下所示: 我的FoodNutritional.class看起来像: 我的方法解决方案可行,但我开始考虑是否有可能摆脱这种流方法的样板。 我要实现的是汇总单个字段:,,和,并将它们作为新对象的components字段返回。 我将很高兴为您提供有关如何提高当前版本代码质量的建议。 编辑: 在周末,我花了一点时间找到一
我有一个带有键值对的an数组,数组列是id和Name。我想按ID对这个数组进行排序。 id列值的类型是string类型,但我希望将它们排序为数值。
有个以下格式的省市区数组对象: 请问如何用Ts变为以下格式的二维数组?
我试图将以下TSV数据解析为嵌套对象,但我的“标题”字段在嵌套类中始终为空。 我已经在底部包含了将TSV数据转换为对象的方法。
我正在做一个课程项目飞行雷达模拟器。 情况是,当两架飞机危险地接近时,两架飞机的图像都发生了变化,而当它们处于安全距离时,它们又发生了变化。 问题是,大多数时候,只有一个图像被改成红色,我不知道问题出在哪里。
各位大佬,我想请问一下我想通过一个数组对象处理另外一个数组对象。生成一个新的数组对象要怎么处理?我想通过两个时间的字段做判断,给新生成的数组对象里面属性的值加上一个1。怎么写都不对。生成的都是有问题的。 通过的数组对象 想要处理的数组对象 我的思路有问题想不出来了,写的代码不对生成的有问题。 我希望的是生成新的数组对象,合并同名,并且根据thisDate生成新的属性。在和data这个json判断时