Я пытаюсь удалить некоторых дочерних объектов объекта, основываясь на том, имеет ли их ключ «size» значение 0.
Я использую пакет npm directory-tree , чтобы получитьобъект 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 Uncaught TypeError: Невозможно прочитать свойство 'type' из неопределенного
Когда я изменяю код, чтобы каждый дочерний элемент был проверен, если это сам объект
if(typeof obj.children[i] === 'object' && obj.children[i].type == "directory"){...}
У меня проблема с циклом, и браузер зависает (нужно перезагрузить).