更改数组格式

时间:2014-10-08 09:03:23

标签: javascript arrays angularjs

我想创建一个包含像这样的子实体的数组结构 - >

$scope.groups = [
    {
        "categories": [
            {
                "name": "PR",
                "sortOrder": 0,
                "type": "category"
            }

        ],
        "name": "DEPT 1",
        "sortOrder": 0,
        "type": "group",
        "id": "-JY_1unVDQ5XKTK87DjN",
        "editing": false
    }
];

来自一个数组,该数组不具有子实体,但所有项目都列在一个对象中,如下所示 - >

$scope.groups = [
    {
        "name": "PR",
        "sortOrder": 0,
        "type": "category"
    },

    {
        "name": "AD",
        "sortOrder": 3,
        "type": "category"
    },
    {
        "name": "DEPT 2",
        "sortOrder": 1,
        "type": "group",
        "id": "-JYZomQKCVseJmaZoIF9",
        "editing": false,
        "categories": []
    },
];

有可能吗?

2 个答案:

答案 0 :(得分:0)

当然是。 它在javascipt中是可行的,虽然为了帮助你设计一些我们需要类别之间关系的东西。

然而,这听起来像是应该在你的数据模型中完成的事情(dept - 类别,经典反身关系父母 - 孩子之间的关系)。 angular应该从后端接收已经订购的数组。

答案 1 :(得分:0)

正如@ Eagle1正确指出的那样。您需要正确定义数据模型以定义为您执行分组的函数。也就是说,根据我的理解,对于包含一些$scope.groups的特定部门,您有一个categories个对象数组,您需要将其合并为子元素。

您可以从定义一个返回像您提到的对象的函数开始:

var organize = function(arr){
  cats = [];
  dep = {};
  $.each( arr, function( i, val ) {
   if(val.type == "category")
    cats.push(val);
   else
    dep = val;
  });

 dep.categories = cats;
 return dep;
}

最终,您必须遍历数组并查找类型为category的对象并将其转储到数组中,并将该数组作为要返回的对象的categories键。我希望它能让你开始朝着正确的方向前进。