首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何基于键/值从对象中删除属性递归

如何基于键/值从对象中删除属性递归
EN

Stack Overflow用户
提问于 2019-10-17 08:40:11
回答 1查看 43关注 0票数 1

根据对象的“大小”-key值是否为0,我试图删除对象的某些子对象。

我使用npm包目录树来获取一个javascript对象,该对象表示所选目录。

该对象如下所示:

代码语言: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的.目录。

我尝试使用自调用函数迭代对象子对象:

代码语言:javascript
复制
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:无法读取未定义的属性“类型”

当我更改代码时,将检查每个子对象本身是否是一个对象

代码语言:javascript
复制
if(typeof obj.children[i] === 'object' && obj.children[i].type == "directory"){...}

我造成了一些循环问题,浏览器冻结了(必须重新启动)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-17 08:53:50

您可以过滤项目,并对嵌套的子级执行命令the。

代码语言:javascript
复制
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);
代码语言:javascript
复制
.as-console-wrapper { max-height: 100% !important; top: 0; }

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58428362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档