Arrays 基于对象属性AngularJS将数组拆分为2

Arrays 基于对象属性AngularJS将数组拆分为2,arrays,angularjs,Arrays,Angularjs,我有一个对象数组,这些对象来自表单上的两个不同输入字段。它们由ID标识 字段1是id:1,字段2是id:2。如何根据它们的ID将它们拆分为两个数组。例如,要存储在array1中的id:1对象和要存储在array2中的id:2对象。我不想硬编码,好像创建了更多的输入字段,这会造成一些混乱 "values":[{"id":"1","description":"123"}, {"id":"1","description":"456"}, {"id":"2","d

我有一个对象数组,这些对象来自表单上的两个不同输入字段。它们由ID标识

字段1是id:1,字段2是id:2。如何根据它们的ID将它们拆分为两个数组。例如,要存储在array1中的id:1对象和要存储在array2中的id:2对象。我不想硬编码,好像创建了更多的输入字段,这会造成一些混乱

"values":[{"id":"1","description":"123"},
          {"id":"1","description":"456"},
          {"id":"2","description":"456"}]

您可以使用Set生成uniques id的列表。然后,使用array.prototype.reduce和array.prototype.filter,您可以动态构建一个对象,该对象为每个id包装所有生成的数组:

var值=[
{“id”:“1”,“description”:“123”},
{“id”:“1”,“description”:“456”},
{“id”:“2”,“description”:“456”}
];
var id=[…新集合(values.map(v=>v.id));
var res=ids.reduce((m,o)=>(m[`array${o}`]=values.filter(v=>v.id==o),m),{});

控制台日志(res)在这种情况下,如果您有兴趣了解它的工作原理,您需要使用
groupBy
作为过滤器

记住 你不需要做一个新的过滤器或其他型号来处理它,只要使用它节省时间

但解决方案是如此简单:

var result = $filter("groupBy")(values, 'id');
//this result will return 1: [{"id":"1","description":"123"},{"id":"1","description":"456"}] & 2: [{"id":"2","description":"456"}]
for(var item in result){
   //item return all keys (ids) => 1, 2
   //result[item] return all objects related to a key OR id
   //so you can do anything here
}

有没有办法使“result”成为数组而不是对象?我知道你可以将[]环绕在值周围,但是这使它成为一个对象数组…如果你考虑
groupBy
你会发现结果一定是object,但是对于你的答案是的,我们可以将它转换为。。。查看更新