Javascript - 根据边缘条件从数组创建嵌套对象

如何解决Javascript - 根据边缘条件从数组创建嵌套对象

递归每次都让我丧命。

我有以下数组:

fooArray: Foo[] = 
[
  { foo: "a",indent: 0 },{ foo: "b",indent: 1 },{ foo: "c",indent: 2 },{ foo: "d",{ foo: "e",{ foo: "f",{ foo: "g",{ foo: "h",]

我想将其映射到不同类型的对象 (TS),并根据它们的缩进值嵌套这些对象:

interface Bar {
  foo: string,bar?: Bar[]
}

bararray: Bar[] = 
[
  { 
    foo: "a",bar: [
      { foo: "b",bar: [{ foo: "c" }],bar: [
          { foo: "e" },{ foo: "f"}
        ] 
      },{
        foo: "g"
      }
    ]
  },{ foo: "h" }
]

我一直在尝试使用 reducer,但需要根据相邻数组成员确定递归级别真的让我很头疼。如果有人有任何想法,将不胜感激!

解决方法

我在这里的解决方案完全在进行中,所以请暂时不要测试或尝试。我不得不离开一段时间,想把这个留在这里待会回来:

let fooArray = [
  { foo: "a",indent: 0 },{ foo: "b",indent: 1 },{ foo: "c",indent: 2 },{ foo: "d",{ foo: "e",{ foo: "e1",{ foo: "e2",{ foo: "e3",{ foo: "f",{ foo: "g",{ foo: "h",];

// let barArray = fooArray.slice().flatMap((e,i,a) => i ? null : Array(a.filter(f => !f.indent).length).fill().map((f,j,b) => a.splice(0,Math.max(a.slice(1).findIndex(g => g.indent === 0)+1,1))));

// WIP // let barArray = fooArray.slice().flatMap((e,1)))).map(e => e.map((f,a) => a[i+1]?.indent > f.indent ? { foo: f.foo,bar: a.splice(i+1,i+2) } : f).filter(f => f));

// WIP #2 // let barArray = fooArray.slice().map(e=>({...e})).flatMap((e,1)))).map(e => e.reverse().map((f,a) => /*console.log(`a[i]: ${JSON.stringify(a[i])}\nf: ${JSON.stringify(f)}`) ||*/ a[i+1]?.indent < f.indent ? (a[i+1].bar = [{foo:f.foo}],a.splice(i,i+1)) : {foo:f.foo}).filter(f=>f).reverse());

// WIP #3 // let barArray = fooArray.slice().map(e=>({...e})).flatMap((_,a) => i ? null : Array(a.filter(e => !e.indent).length).fill().map(e => a.splice(0,Math.max(a.slice(1).findIndex(f => f.indent === 0)+1,1)))).map(e => e.length > 1 ? e.flatMap((_,i) => i ? null : Array(e.filter(e => !e.indent).length).fill().map(f => e.splice(0,Math.max(e.slice(1).findIndex(g => g.indent === 0)+1,1)))) : e);

// simple get object // let barArray = fooArray.slice().map(e=>({...e})).flatMap((_,1))));

// NEW WIP

fooArray.slice().map(e=>({...e})).flatMap((_,1)))).map(e => e.length > 1 ? { foo: e[0].foo,bar: e.slice(1) } : e[0])
.map(a => a.bar ? 
    ((a.bar = a.bar.reverse().flatMap((e,i) => 
        a.bar.findIndex((f,j) => j > i && e.indent !== f.indent) !== -1 ? 
            (a.bar.find((f,j) => j > i && e.indent !== f.indent).indent > e.indent ? e : (a.bar.find((f,j) => j > i && e.indent !== f.indent).bar = a.bar.splice(i,a.bar.findIndex((f,j) => j > i && e.indent !== f.indent))))
            : e
    ).reverse()),a)
    : a
)

console.log(barArray);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?