我找了又找,找不到答案,所以如果我是愚蠢的,请接受我的道歉。
我正在 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/