javascript - 如何完全删除javascript中的空数组?

标签 javascript json node.js

我找了又找,找不到答案,所以如果我是愚蠢的,请接受我的道歉。

我正在 node.js 中构建一个应用程序,它使用 JSON 文件作为项目配置。我正在使用“fs”模块读取 JSON 文件,然后将其解析为 Javascript 对象。然后我在使用 JSON.stringify 将数据写回文件之前修改对象中的详细信息。

我的问题是我需要删除一个数组,而不仅仅是清空它,以便在我的界面上正确显示数据:

"floors": [
    {
        "floorName": "Grd Floor",
        "floorNotes": "",
        "floorPlan": "Buckley_Grd.jpg",
        "floorWidth": "57.392",
        "floorHeight": "20.776",
        "runs": [
            [],  *<----I cannot delete these*
            []   *<----only empty them*
            [
                {
                    "xCoOrd": "37.88235294117647",
                    "yCoOrd": "59.307359307359306",
                    "drawingType": "node"
                },
                {
                    "xCoOrd": "37.88235294117647",
                    "yCoOrd": "59.307359307359306",
                    "drawingType": "node"
                },
                {
                    "xCoOrd": "48.549019607843135",
                    "yCoOrd": "50",
                    "drawingType": "node"
                }
            ]   *<----I don't want to delete the elements in this array*
        ]
    }

我试过:

.splice(0);
.filter(Boolean);
delete

在我看过的所有地方,人们似乎对有人想要从内存中删除一个未使用的数组感到惊讶,这正是我相信我正在尝试做的事情。也许有一种方法可以将忽略这些空数组的对象字符串化?又或许我的做法完全错误?

非常感谢您提供的任何建议。

编辑:我应该更清楚地表明我不一定要删除数组中的所有 elemnet,因此重新声明 floors.runs =[] 不幸的是对我没有帮助。

我试过:

delete floors[floorID].runs[runID];

这会将数组替换为空值,空值会写入文件并破坏我对 JSON 的读取。

最佳答案

您是否尝试覆盖每个对象的“runs”属性?如果你说 floors[0].runs = [](或者 floors[i].runs = [],如果你正在循环),那么这两个是空的数组将不再出现在您的字符串化中。

编辑我的答案,以匹配 OP 编辑​​:

floors.forEach(function(floor){
   var newRuns = [];
   floor.runs.forEach(function(run){
       if (run.length > 0){
           newRuns.push(run);
       }
   })
   floor.runs = newRuns;
})

在我将您的对象从 OP 分配到一个变量并在其上运行我的代码,然后将结果字符串化后,我得到了这个作为返回:

{"floors":[{"floorName":"Grd Floor","floorNotes":"","floorPlan":"Buckley_Grd.jpg","floorWidth":"57.392","floorHeight":"20.776","runs":[[{"xCoOrd":"37.88235294117647","yCoOrd":"59.307359307359306","drawingType":"node"},{"xCoOrd":"37.88235294117647","yCoOrd":"59.307359307359306","drawingType":"node"},{"xCoOrd":"48.549019607843135","yCoOrd":"50","drawingType":"node"}]]}]}

这是您希望看到的吗?我用了这个fiddle产生那个结果。

关于javascript - 如何完全删除javascript中的空数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36517248/

相关文章:

node.js - 将查询参数序列化为文件名

javascript - 如果我在同步 ajax 调用之后进行异步 ajax 调用,会发生什么情况?

javascript - 未捕获的类型错误 : Cannot read properties of undefined (reading 'deep' ) when upgrade to vue 3. x

javascript - 当所有 json 数据都经过循环时如何运行 then()

javascript - 使用 ReactJS 从模拟 api 获取 json 时定位一个对象

javascript - 计算状态记录(已批准、待定、拒绝)并将值返回到各自的变量中

javascript - 仅当数组存在时 lodash 映射数据

javascript - OAuth2 授权代码授权流程 Node.js 与客户端混合

java - 如何修复错误 json.JSONException : Index 1 out of range [0. .1)

javascript - 如何从 HTML 登录页面在 Node.js 控制台中进行通信或获取数据?