JavaScript,无法对对象进行排序

时间:2018-06-13 12:37:47

标签: javascript algorithm sorting lodash

编辑:从重复的威胁中找到答案。请忽略这一点,谢谢

我一直在努力对下面的一个对象数组进行排序。目标是迭代并显示对象中的图像,但它们需要按顺序分开日期。

例如,要显示的顺序应为:

2001年7月12日

  • 图像
  • 图像
  • image

2000年1月1日

  • image
  • image
  • image

1999年10月10日

  • 图像
  • image
  • image

这个问题对我来说是一个排序问题。我可以迭代并显示所有图像,但图像没有按日期排序。

arr: [
  {
    date: 'January 1, 2000',
    url: 'string',
    id: 1
  },
  {
    date: 'July 12, 2001',
    url: 'string',
    id: 142
  },
  {
    date: 'October 10, 1999',
    url: 'string',
    id: 333
  },
  {
    date: 'January 12, 2000',
    url: 'string',
    id: 1
  },
  {
    date: 'January 1, 2000',
    url: 'string',
    id: 1
  },
  {
    date: 'July 12, 2001',
    url: 'string',
    id: 142
  },
  {
    date: 'October 10, 1999',
    url: 'string',
    id: 333
  },
  {
    date: 'July 12, 2001',
    url: 'string',
    id: 142
  },
  {
    date: 'October 10, 1999',
    url: 'string',
    id: 333
  },
]

我尝试过使用lodash libray函数_.keyBy并返回3个对象,其中日期为键,值为与所述键关联的对象,但是,每个键只返回一个对象而不是所有对象都与之相关联日期。

编辑: 按ID排序也有效,但我仍然需要将标题显示为不应成为问题的日期

1 个答案:

答案 0 :(得分:-1)

首先,您必须按日期对图像进行分组:

const day = {}, result = [];

for(const {date, ...img} of arr) {
  if(day[date]) {
    day[date].push(img);
  } else {
    result.push({date, entries: (day[date] = [img]) });
 }
}

然后您可以按日期对结果进行排序:

result.sort((a, b) => +new Date(a.date) - new Date(b.date));