如何在不描述结构的情况下创建数组?

时间:2019-08-20 14:06:02

标签: arrays

我尝试将http请求的结果放入数组中,但遇到了一些困难。我获得了创建与上一个菜单项选择有关的菜单的数据。因此,对于此菜单,我将获得所有子菜单。这些子菜单具有id_menu(与选择的菜单有关),id_parent(知道它们是否是子菜单的子菜单)和其他类似名称的属性,因此当我获得所有这些子菜单时,我想将它们存储排列成一个数组。我要在第一行中包含所有没有父项的子项,然后是其父项子菜单下的所有子项菜单。

当我获取数据时,我在它们上循环查看是否没有id_parent,然后将它们推入一个名为tabRes = [];的数组中。在同一循环中,我现在再次检查它们是否id_parent,然后尝试在tabRes上循环以检查哪个(子菜单的ID)与(其他子菜单的)id_parent相匹配。然后,我想在此元素上创建类型表的属性(子级),以添加一个数组,用于存储子子菜单。

this.sousMenuService
    .getAllByMenu(this.message.id)
    .subscribe( sousMenu => {
                        this.sousMenus = sousMenu;

                        for (let x of this.sousMenus) {
                            if (x.id_parent == null) {
                                console.log(x.nom);
                                this.tabRes.push(x);
                            }

                            if (x.id_parent != null) {
                                for (let y of this.tabRes) {
                                    if (x.id_parent == y.id) {
                                        y.child.push(x);
                                    }
                                }
                            }
                        }

                        console.log(this.tabRes[0].child);
                });

我收到此错误:

  

错误TypeError:无法读取未定义的属性“ push”。

我可能采用错误的方法。我想创建一个像[{element1id:1,....,child:[{element2id_parent:1 ...}]}},{element2id:2,....,child:[{element2id_parent:2。 ..}]}]

1 个答案:

答案 0 :(得分:0)

动态定义属性时,它将为{ "message": "Invalid request body" } 。您可以为其分配所需的任何内容,但不能期望将其作为数组并在其上使用undefined方法。

解决方案是在此处检查 falsy 值(push)是否为undefined并为其分配一个新数组,该数组具有您想要的值作为元素它。如果不是false,请确保已为该数组分配了一个数组,因此可以将新元素推入该数组的顶部。

false