我有一个看起来像这样的数据:
{
"fileObjects": [
{
"type": "DIRECTORY",
"name": "st",
"fileObjects": [
{
"type": "DIRECTORY",
"name": "ko",
"fileObjects": [
{
"type": "DIRECTORY",
"name": "ve",
"fileObjects": []
}
]
}
]
},
{
"type": "FILE",
"name": "ac"
},
{
"type": "DIRECTORY",
"name": "rf",
"fileObjects": [
{
"type": "DIRECTORY",
"name": "lo",
"fileObjects": [
{
"type": "FILE",
"name": "we",
}
]
}
]
}
]
}
我想递归地过滤空目录,简单地摆脱它们:
{
"fileObjects": [
{
"type": "FILE",
"name": "ac"
},
{
"type": "DIRECTORY",
"name": "rf",
"fileObjects": [
{
"type": "DIRECTORY",
"name": "lo",
"fileObjects": [
{
"type": "FILE",
"name": "we",
}
]
}
]
}
]
}
我的尝试:
function mapFileObject(fileObject) {
if (fileObject.type === "FILE") {
return fileObject;
}
return {
...fileObject,
fileObjects: fileObject.fileObjects
.filter((fileObjectChild) => {
return fileObjectChild.fileObjects.length > 0;
})
.map((fileObjectChild) => mapFileObject(fileObjectChild)),
};
}
const newFileObjects = {
fileObjects: input.fileObjects.map((fileObjectChild) =>
mapFileObject(fileObjectChild)
),
};
不幸的是,这不起作用
filter
和 map
函数调用的顺序很重要,您应该在使用递归调用调用 map
后使用过滤器。 .map((fileObjectChild) => mapFileObject(fileObjectChild)),
.filter((fileObjectChild) => {
return fileObjectChild.fileObjects.length > 0;
})