Группировка данных по дате (году) Vue.js - PullRequest
0 голосов
/ 22 октября 2018

Я пытаюсь сгруппировать свои данные по дате: даты с одинаковым годом принадлежат группе.я хочу сгруппировать счета по data_emissione, которые имеют следующую структуру:

        invoices: [
         {id,data_emissione:"2017-06-19 00:00:00"},
         {id,data_emissione:"2017-05-19 00:00:00"},
         {id,data_emissione:"2018-06-24 00:00:00"}
        ]

, но следующий метод ничего не возвращает.

export default {
        data(){
            return {
                invoices:[],
                groups:{}

            }
        },
 mounted(){
            this.getMine();
            this.groupInvoices();
        },
 methods:{
            groupInvoices(){
                var self = this;
                var groups = _.groupBy(self.invoices,function(d){
                    return moment(d.data_emissione).year().format();
                });

            },

Любая помощь будет признательна

Ответы [ 3 ]

0 голосов
/ 22 октября 2018

Это то, что я делаю в большинстве случаев:

  1. извлечение необработанных данных
  2. форматирование их с добавлением реквизитов
  3. манипулирование отформатированными данными

Вы также можете использовать lodash groupBy, но в большинстве случаев мне нужен массив или массивы, а не объект массивов.

// retrieve
let invoices = [
  {id: 1, data_emissione: "2017-06-19 00:00:00"},
  {id: 2, data_emissione: "2017-05-19 00:00:00"},
  {id: 3, data_emissione: "2018-06-24 00:00:00"}]
  
// format  
let formattedInvoices = invoices.map(elem => ({
  id: elem.id,
  data_emissione: elem.data_emissione,
  year: moment(elem.data_emissione).year()
}));

// manipulate
let groupedInvoices = [2017, 2018].map(year => formattedInvoices.filter(elem => elem.year === year))

console.log(groupedInvoices)
<script src="https://momentjs.com/downloads/moment.min.js"></script>
0 голосов
/ 01 ноября 2018

Попытка улучшить предыдущий ответ:

// retrieve
const invoices = [
    {id: 1, data_emissione: "2017-06-19 00:00:00"},
    {id: 2, data_emissione: "2017-05-19 00:00:00"},
    {id: 3, data_emissione: "2018-06-24 00:00:00"}]

  const groupedInvoices = {};

  invoices.forEach((invoice) => {
    const year = moment(invoice.data_emissione).year();
    groupedInvoices[year] = groupedInvoices[year] || [];
    groupedInvoices[year].push(invoice);
  });

Просто используйте объект с ключами - годы и избегайте использования другого массива данных.

0 голосов
/ 22 октября 2018

Удалить .format() и должно работать:

export default {
    data(){
        return {
            invoices:[
                {data_emissione:"2017-06-19 00:00:00"},
                {data_emissione:"2017-05-19 00:00:00"},
                {data_emissione:"2018-06-24 00:00:00"}
            ],
            groups: {}
        }
    },
    mounted(){
        this.getMine();
        this.groupInvoices();
    },
    methods:{
        groupInvoices(){
            var self = this;
            var this.groups = _.groupBy(self.invoices,function(d){
                return moment(d.data_emissione).year();
            });

        },
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...