javascript - 如何将字符串数组转换为嵌套的 JSON 对象?
问题描述
我想在前端的 blob 存储中显示所有文件和文件夹。我正在为此使用 PrimeNG 树组件。但是,我无法将我的回复转换为 primeNG 所需的格式。
这是实际的响应:
"filenames": [
"/30",
"/mtcagent.log",
"/spe9_xf.rst/bin/sbin/spe9_rgg-prop_ycoer.fbin",
"/spe9_xf.rst/bin/sbin/spe.fbin"
]
预期的:
[
{"label": "30",
"Icon": "pi pi-folder"
},
{
"label": "mtcagent.log",
"Icon": "pi pi-folder"
},
{
"label": "spe9_xf.rst",
"Icon": "pi pi-folder",
"children": [
{
"label": "bin",
"Icon": "pi pi-folder",
"children": [
{
"label": "sbin",
"Icon": "pi pi-folder",
"children": [
{
"label": "spe9_rgg-prop_ycoer.fbin",
"Icon": "pi pi-file",
},
{
"label": "spe.fbin",
"Icon": "pi pi-file",
}
]
}
]
}
]
}
]
到目前为止,这是我的代码:
var arr = [
"abc.rft",
"ccc.rft",
"spe9_sgrid_long_rstcreation.rst/bin/sbin/spe9_batch-grid.dat.binfiles"
];
var arrOfObjs = new Array();
for (let i = 0; i < arr.length; i++) {
var obj = {
"expandedIcon": "pi pi-folder-open",
"collapsedIcon": "pi pi-folder"
};
obj.label = arr[i];
arrOfObjs.push(obj);
}
arrOfObjs.forEach(e => {
if (e.label.indexOf('/') == -1) {
} else {
var carray = new Array();
var x = e.label.split('/');
e.label = x[0];
obj.label = e.label;
carray.push(obj);
console.log('carray', carray)
e['children'] = JSON.stringify(carray);
console.log('sss', arrOfObjs)
}
});
解决方案
您可以使用 .map 高阶函数来执行此操作。
推荐阅读
- scenekit - 更新场景视图的 pointOfView 位置属性后的 SceneKit `projectPoint` 问题
- ios - idleTimerDisabled 不适用于(自治)单应用程序模式
- azure - 如何在 Azure devops 中为多个管道(在多个项目中)使用管道模板
- php - 如何增加 Wordpress 中特定用户角色的最大上传文件大小?
- reactjs - 如何编写 package.json 以将 Electron 与 TypeScript、React 一起使用
- crystal-reports-2008 - 如何在 Crystal Reports 中使用自定义 SQL 语句?
- ssl - 如何使用 SSL 和 Vue CLI 进行本地开发?
- java - Timer Service:Bean在EJB3.1中没有定时器
- python - 如何使用 df1 和 df2 获得像 DF3 和 DF4 这样的输出?
- javascript - 如何处理和验证后端和前端之间的会话