Фильтр AngularJS для объединения объектов в один массив объектов

У меня есть возвращаемые массивы ng-repeat, подобные приведенным ниже:

[{"day":"10","title":"day","summary":"summary","description":"ok","_id":"53f25185bffedb83d8348b22"}]
[{"day":"3","title":"day","summary":"summary","description":"ok","_id":"53f25185bffedb83d8348b22"}]

Я хотел бы создать фильтр для объединения массивов в один массив, чтобы я мог использовать orderBy | 'день'.

[
{"day":"10","title":"day","summary":"summary","description":"ok","_id":"53f25185bffedb83d8348b22"},
    {"day":"3","title":"day","summary":"summary","description":"ok","_id":"53f25185bffedb83d8348b22"
}]

У меня есть фильтр, используемый для фильтрации моего общего объекта, но логика здесь намного проще, я не уверен, как настроить фильтр, который мне нужен, чтобы объединить эти объекты.

angular.module('hcApp')
.filter('combine', function() {
  return function(items) {
    var temp = [];
    var result = temp.concat.apply(temp,items.map(function(itm){ 
      return temp.concat.apply(temp, Object(itm).map(function(key){ 
       return itm.year[key]; 
  }));
}));  
    return result;
  };
});

person byrdr    schedule 20.08.2014    source источник


Ответы (2)


Я думаю, поскольку данные поступают в виде массива 2D-массивов, и чтобы сгладить их, вы можете просто выполнить concat на своем фильтре.

angular.module('hcApp')
.filter('combine', function() {
  return function(items) {
     return [].concat.apply([],items)
          .sort(function(a,b){ return +a.day < b.day ? -1 : 1; });//and add sort as well probably
  };
});

Корзина

person PSL    schedule 20.08.2014
comment
Круто, большое спасибо за вашу помощь. Не работает почему-то, но вроде должно. Я соберу корзину - person byrdr; 20.08.2014
comment
@byrdr это сработало для тебя. Увидел еще один вопрос от вас. Если у вас есть проблема, можете ли вы опубликовать рабочий проект, я попытаюсь помочь - person PSL; 20.08.2014
comment
По какой-то причине я не смог заставить фильтр работать с моей настройкой, хотя результирующий массив выглядел так же, как массив в корзине, который, на мой взгляд, работал с вашим фильтром. Я соберу планкр вместе - person byrdr; 20.08.2014

Я думаю, вы можете просто использовать .push(), чтобы соединить их вместе. Поскольку каждый из ваших возвращаемых массивов состоит из 1 элемента, вам нужно будет получить доступ к первому элементу каждых данных и поместить его в другой окончательный массив.

  var some_data_1 = [{"day":"10","title":"day","summary":"summary","description":"ok","_id":"53f25185bffedb83d8348b22"}];
  var some_data_2 = [{"day":"3","title":"day","summary":"summary","description":"ok","_id":"53f25185bffedb83d8348b22"}] ;

  var temp = [];
  //push the first element(the only element) in the returning arrays
  temp.push(some_data_1[0], some_data_2[0]);

Вот рабочий планкр: http://plnkr.co/edit/t5zRAYmobyYqkEKhrGTd?p=preview

person CozyAzure    schedule 20.08.2014