根据对象的“大小”-key值是否为0,我试图删除对象的某些子对象。
我使用npm包目录树来获取一个javascript对象,该对象表示所选目录。
该对象如下所示:
{
"path": "directory",
"name": "directory",
"children": [
{
"path": "directory\\file1.html",
"name": "file1.html",
"size": 147,
"extension": ".html",
"type": "file"
},
{
"path": "directory\\file2.htm",
"name": "file2.htm",
"size": 147,
"extension": ".htm",
"type": "file"
},
{
"path": "directory\\file3.php",
"name": "file3.php",
"size": 147,
"extension": ".php",
"type": "file"
},
{
"path": "directory\\subdirectory-1",
"name": "subdirectory-1",
"children": [],
"size": 0,
"type": "directory"
},
{
"path": "directory\\subdirectory-2",
"name": "subdirectory-2",
"children": [
{
"path": "directory\\subdirectory-2\\subfile1.html",
"name": "subfile1.html",
"size": 147,
"extension": ".html",
"type": "file"
},
{
"path": "directory\\subdirectory-2\\subfile2.htm",
"name": "subfile2.htm",
"size": 147,
"extension": ".htm",
"type": "file"
}
],
"size": 294,
"type": "directory"
},
{
"path": "directory\\subdirectory-3",
"name": "subdirectory-3",
"children": [
{
"path": "directory\\subdirectory-3\\sub-subdirectory",
"name": "sub-subdirectory",
"children": [],
"size": 0,
"type": "directory"
},
{
"path": "directory\\subdirectory-3\\subfile3.php",
"name": "subfile3.php",
"size": 147,
"extension": ".php",
"type": "file"
},
{
"path": "directory\\subdirectory-3\\subfile4.html",
"name": "subfile4.html",
"size": 147,
"extension": ".html",
"type": "file"
}
],
"size": 294,
"type": "directory"
}
],
"size": 1029,
"type": "directory"
}现在,我正在尝试删除每个大小为0的.目录。
我尝试使用自调用函数迭代对象子对象:
function filterObject(obj){
for(i=0; i<obj.children.length; i++){
if(obj.children[i].type == "directory"){
if(obj.children[i].size == 0){
delete obj.children[i]
}
else {
filterObject(obj.children[i])
}
}
}
}但我收到了一个错误:
renderer.js:22未定义的TypeError:无法读取未定义的属性“类型”
当我更改代码时,将检查每个子对象本身是否是一个对象
if(typeof obj.children[i] === 'object' && obj.children[i].type == "directory"){...}我造成了一些循环问题,浏览器冻结了(必须重新启动)。
发布于 2019-10-17 08:53:50
您可以过滤项目,并对嵌套的子级执行命令the。
function removeZero(o) {
if (o.size === 0) return false;
if (o.children) o.children = o.children.filter(removeZero);
return true;
}
var data = { path: "directory", name: "directory", children: [{ path: "directory\file1.html", name: "file1.html", size: 147, extension: ".html", type: "file" }, { path: "directory\file2.htm", name: "file2.htm", size: 147, extension: ".htm", type: "file" }, { path: "directory\file3.php", name: "file3.php", size: 147, extension: ".php", type: "file" }, { path: "directory\\subdirectory-1", name: "subdirectory-1", children: [], size: 0, type: "directory" }, { path: "directory\\subdirectory-2", name: "subdirectory-2", children: [{ path: "directory\\subdirectory-2\\subfile1.html", name: "subfile1.html", size: 147, extension: ".html", type: "file" }, { path: "directory\\subdirectory-2\\subfile2.htm", name: "subfile2.htm", size: 147, extension: ".htm", type: "file" }], size: 294, type: "directory" }, { path: "directory\\subdirectory-3", name: "subdirectory-3", children: [{ path: "directory\\subdirectory-3\\sub-subdirectory", name: "sub-subdirectory", children: [], size: 0, type: "directory" }, { path: "directory\\subdirectory-3\\subfile3.php", name: "subfile3.php", size: 147, extension: ".php", type: "file" }, { path: "directory\\subdirectory-3\\subfile4.html", name: "subfile4.html", size: 147, extension: ".html", type: "file" }], size: 294, type: "directory" }], size: 1029, type: "directory" };
data.children = data.children.filter(removeZero);
console.log(data);.as-console-wrapper { max-height: 100% !important; top: 0; }
https://stackoverflow.com/questions/58428362
复制相似问题