在struct

时间:2015-08-06 03:08:05

标签: angularjs struct

好的,所以我有一个JSON文件,其中包含许多可以按多种方式排序的信息。实际的JSON太大了,但是对于相关的例子:

$myData = 
{
  "id":1,
  "author_id":[17],
  "date":"10/1/1996",
  "title":"Article1"
},
{
  "id":2,
  "author_id":[16,17],
  "date":"9/1/1996",
  "title":"Article2"
},
{
  "id":3,
  "author_id":[16],
  "date":"6/1/1996",
  "title":"Article3"
};

我希望能够将其排序为具有基本结构的结构:

$myDataByAuthor = 
{"17" = 
    {
    "id":1,
    "date":"10/1/1996",
    "title":"Article1"
    },
    {
    "id":2,
    "date":"9/1/1996",
    "title":"Article2"
    }
},
{"16" = 
    {
    "id":3,
    "date":"6/1/1996",
    "title":"Article3"
    };
    {
    "id":2,
    "date":"9/1/1996",
    "title":"Article2"
    }
};

我知道语法不好,但我不确定如何解决这个问题,这就是我要问的原因。

我想这样做的原因是因为我想转过身来,在我的代码中使用ng-repeat能够输出一些效果:

Author with id 16
    6/1/1996 - Article3
    9/1/1996 - Article2

Author with id 17
    9/1/1996 - Article2
   10/1/1996 - Article1

我只是没有看到如何完成这件事。

谢谢!

2 个答案:

答案 0 :(得分:0)

你当然可以用这种方式对其进行重组,这里有一个小提琴和函数代码,可以为你重构它。

var table = {}

myData.forEach(function(element){
    element.author_id.forEach(function(id){
        table[id] = table[id] || []
        table[id].push(element)
    })
})

https://jsfiddle.net/q40yhhko/

答案 1 :(得分:0)

考虑您的数据是:

$myData = [{ "id":1, "author_id":[17], "date":"10/1/1996", "title":"Article1"},
           {"id":2, "author_id":[16,17], "date":"9/1/1996", "title":"Article2"},
           {"id":3, "author_id":[16], "date":"6/1/1996", "title":"Article3" }];

在代码

下面形成所需的JSON使用
$scope.requiredJSON = {};  //FORMATED JSON DATA
angular.foreach($myData, function(value, index){
     angular.foreach(value.author_id, function(innerVal, innerIndex){
         $scope.requiredJSON[innerVal] = $scope.requiredJSON[innerVal] || [];
         $scope.requiredJSON[innerVal].push({id: value.id, date: value.date, title: value.title});
     })
});

以下是输出:

{17: [{"id":1, "date":"10/1/1996", "title":"Article1" },
                {"id":2, "date":"9/1/1996", "title":"Article2" }], 
           16: [{"id":2, "date":"9/1/1996", "title":"Article2" }]};

https://jsfiddle.net/AmitParrikar/uzv2p72b/2/