AngularJS:删除重复的对象并按值对数组进行重新排序

AngularJS: Remove duplicate objects and reorder an array by value

本文关键字:数组 新排序 排序 删除 对象 AngularJS      更新时间:2023-09-26

我使用的是json,这是一个结构:

  { "variants": [
    { "capacity":"A", "color":"1" },
    { "capacity":"A", "color":"2" },
    { "capacity":"B", "color":"3" }
  ]};

使用angular.forEach或另一种方法,我想显示不重复的数据,重新排序并通过"容量"将其关联起来,类似于这样(一个新数组):

$scope.newArray = [
  { "capacity":"A", "color1":"1", "color2":"2" },
  { "capacity":"B", "color_1":"3" }
];

这可能是一种有角度的方式或简单的javascript,我需要帮助!

a = { 'variants': [
      {'capacity': 'A','color': '1'},
      {'capacity': 'A','color': '2'},
      {'capacity': 'B','color': '3'},
]};
b = a.variants
c = b.reduce(function (prev, crt) {
  prev[crt.capacity] = (prev[crt.capacity] || [
  ]).concat(crt.color)
  return prev;
}, {})
// c is now {"A": ["1","2"], "B": ["3"]}
d = []
for (var name in c) {
  if (c.hasOwnProperty(name)) {
    f = {
      'capacity': name
    }
    c[name].forEach(function (e) {
      f['color' + e] = e;
    })
    // f is {"capacity": "A", "color1": "1","color2": "2"}
    // and then {"capacity": "B", "color3": "3"}
    d = d.concat(f)
  }
}
// d is [{"capacity": "A", "color1": "1","color2": "2"},
//       {"capacity": "B", "color3": "3"}]