跪求用js/ts方法解决以下数据格式转换?
请教一下各位大神怎么把下面的原始数据变成目标数据。就相当于把所有的 key 一层一层拼接起来,组成所需路径,存在当前层级中。(数据层级深度完全随机)
// 原始数据
let fileInfo = [
{
code: [
{
scripts: [
{
server: [
{
bd: [ 'init.ts', 'index.tsx' ],
data: [
'init.ts',
'app.tsx',
{
test: [
{
res: [ 'config.ts' ]
}
]
}
]
}
]
}
]
}
]
}
]
// 目标数据
let fileInfo = [
{
pathName: 'code',
code: [
{
pathName: 'code/scripts',
scripts: [
{
pathName: 'code/scripts/server',
server: [
{
pathName: 'code/scripts/server/bd',
bd: [
{
pathName: 'code/scripts/server/bd/init.ts',
value: 'init.ts'
},
{
pathName: 'code/scripts/server/bd/index.tsx',
value: 'index.tsx'
}
]
},
{
pathName: 'code/scripts/server/data',
data: [
{
pathName: 'code/scripts/server/data/init.ts',
value: 'init.ts'
},
{
pathName: 'code/scripts/server/data/app.tsx',
value: 'app.tsx'
},
{
pathName: 'code/scripts/server/data/test',
test: [
{
pathName: 'code/scripts/server/data/test/res',
res: [
{
pathName: 'code/scripts/server/data/test/res/config.ts',
value: 'config.ts'
}
]
}
]
}
]
}
]
}
]
}
]
}
]
回复
1个回答

test
2024-07-12
假设你的 init.ts
、index.tsx
、app.tsx
、config.ts
都为字符串,只是你忘记用 ''
或 ""
括起来了。
js
代码
let f = (a, p = []) => a.flatMap(i => typeof(i) === 'string' ? {
pathName: [...p, i].join('/'),
value: i,
} : Object.entries(i).map(([k, v]) => ({
pathName: [...p, k].join('/'),
[k]: f(v, [...p, k]),
}))
);
使用
f(fileInfo)
结果
[
{
"pathName": "code",
"code": [
{
"pathName": "code/scripts",
"scripts": [
{
"pathName": "code/scripts/server",
"server": [
{
"pathName": "code/scripts/server/bd",
"bd": [
{
"pathName": "code/scripts/server/bd/init.ts",
"value": "init.ts"
},
{
"pathName": "code/scripts/server/bd/index.tsx",
"value": "index.tsx"
}
]
},
{
"pathName": "code/scripts/server/data",
"data": [
{
"pathName": "code/scripts/server/data/init.ts",
"value": "init.ts"
},
{
"pathName": "code/scripts/server/data/app.tsx",
"value": "app.tsx"
},
{
"pathName": "code/scripts/server/data/test",
"test": [
{
"pathName": "code/scripts/server/data/test/res",
"res": [
{
"pathName": "code/scripts/server/data/test/res/config.ts",
"value": "config.ts"
}
]
}
]
}
]
}
]
}
]
}
]
}
]
回复

适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容