Похоже, есть несколько проблем:
В !category.parent in categoriesTree
вы бы взяли логическое НЕ category.parent
(которое будет true
или false
) и используя этот результат в операции in
.Вам нужно ()
вокруг выражения in
: !(category.parent in categoriesTree)
Даже с ревизией, которая проверяет свойство, имя которого равно category.parent
в categoriesTree
,Но затем вы создаете свойство с именем parent
, а не свойство с именем из category.parent
.
Если предполагается, что свойство имеет значение category.parent
, используйте этовместо 'parent'
:
if (!(category.parent in categoriesTree)) {
categoriesTree[category.parent] = {'name': '', 'children': []};
}
categoriesTree[category.parent]['children'].push({'name': category.name, 'id': category.id});
Если предполагается, что он будет называться parent
(буквально), используйте вместо этого последовательно:
if (!("parent" in categoriesTree)) {
categoriesTree.parent = {'name': '', 'children': []};
}
categoriesTree.parent['children'].push({'name': category.name, 'id': category.id});
Если categoriesTree
либо не будет иметь свойства с именем x
, либо свойство будет иметь ссылку на объект в качестве значения, вы можете использовать if (!categoriesTree.x
) rather than
if (! ("x" в categoryTree)) `.Применяя это к двум опциям, указанным выше:
if (!categoriesTree[category.parent])) {
categoriesTree[category.parent] = {'name': '', 'children': []};
}
categoriesTree[category.parent]['children'].push({'name': category.name, 'id': category.id});
Если предполагается, что он называется parent
(в буквальном смысле), то используйте вместо этого последовательно:
if (!categoriesTree.parent)) {
categoriesTree.parent = {'name': '', 'children': []};
}
categoriesTree.parent['children'].push({'name': category.name, 'id': category.id});