Javascript - 按年、月和日分组的对象数组

标签 javascript date underscore.js lodash

我正在尝试按日期、月份和星期对对象数组进行排序

myArray : [
            {'name' : 'example1', 'date' : '2011-01-01'},
            {'name' : 'example1', 'date' : '2011-01-02'},
            {'name' : 'example1', 'date' : '2011-02-02'},
            {'name' : 'example1', 'date' : '2011-02-15'},
            {'name' : 'example1', 'date' : '2011-02-17'},
            {'name' : 'example1', 'date' : '2012-01-01'},
            {'name' : 'example1', 'date' : '2012-03-03'},
]

我想要这样的结果:

result : [{
                    '2011': { // Year 2011
                        '01': { // January
                            '01' : [ // First week of January
                                {'name' : 'example1', 'date' : '2011-01-01'},
                                {'name' : 'example1', 'date' : '2011-01-02'},
                            ]
                        },
                        '02' : { // February
                            '01' : [ // First week of February
                                {'name' : 'example1', 'date' : '2011-02-02'},
                            ],
                            '03' : [
                                {'name' : 'example1', 'date' : '2011-02-15'},
                                {'name' : 'example1', 'date' : '2011-02-17'},
                            ]
                        }
                    },
                    '2012' : { // Year 2012
                        '01' : { // January
                            '01': [ // First week of January
                                {'name': 'example1', 'date': '2012-01-01'}
                            ]
                        },
                        '03': { // March
                            '01' : [ // First week of March
                                {'name' : 'example1', 'date' : '2012-03-03'},
                            ]
                        }
                    }
                }]

我将 lodash.groupByreturn getISOWeek(obj.date)return getMonth(obj.date)return 一起使用getYear(obj.date).

我设法按年和月、年和周对数据进行排序,但我不知道如何同时对这三个进行排序。

谢谢你的帮助

最佳答案

使用 lodash 是正确的选择。

var myArray = [
  {'name' : 'example1', 'date' : '2011-01-01'},
  {'name' : 'example1', 'date' : '2011-01-02'},
  {'name' : 'example1', 'date' : '2011-02-02'},
  {'name' : 'example1', 'date' : '2011-02-15'},
  {'name' : 'example1', 'date' : '2011-02-17'},
  {'name' : 'example1', 'date' : '2012-01-01'},
  {'name' : 'example1', 'date' : '2012-03-03'},
];

var orderedByMonths = _.groupBy(myArray, function(element) {
                          return element.date.substring(0,7);
                      });
            
var orderedByYears =  _.groupBy(orderedByMonths, function(month) {
                          return month[0].date.substring(0,4);
                      });

console.log(orderedByYears);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

关于Javascript - 按年、月和日分组的对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43701245/

相关文章:

javascript - 使用 jquery,当我单击链接时,如何引用其上方的选择下拉列表?

javascript - React-倒计时-现在不在渲染上更新

java - 将日期字符串与时区进行比较

mysql - DATE_SUB() 和 MIN() 问题

javascript - 使用 javascript/underscore.js 查找并替换 json 对象中的属性值

javascript - 在 javascript 中管理 secret 信息

javascript - 通过 optgroup 从另一个 select2 过滤 seelct2

date - 如何在VB中以mm/dd/yyyy格式打印日期

javascript - 从复杂的 JavaScript 对象中删除对象的最佳方法是什么

javascript - 下划线和 Bootstrap 日期时间选择器