假设我有一个包含几个对象的数组:

var array = [{id: 1, date: Mar 12 2012 10:00:00 AM}, {id: 2, date: Mar 8 2012 08:00:00 AM}];

如何按日期元素排序这个数组,从最接近当前日期和时间的日期下来?请记住,数组可能有许多对象,但为了简单起见,我使用2。

我会使用排序函数和自定义比较器吗?


当前回答

你可以在下划线js中使用sortBy。

http://underscorejs.org/#sortBy

示例:

var log = [{date: '2016-01-16T05:23:38+00:00', other: 'sample'}, 
           {date: '2016-01-13T05:23:38+00:00',other: 'sample'}, 
           {date: '2016-01-15T11:23:38+00:00', other: 'sample'}];

console.log(_.sortBy(log, 'date'));

其他回答

如果你喜欢MongoDB,其中一个解决方案是:

db.collection.find({}).sort("your date field");  
For example:  
db.collection.find({}).sort("createdAt");  

这是解决你的问题的最短方法。

  var array = [{id: 1, date: 'Mar 12 2012 10:00:00 AM'}, {id: 2, date: 'Mar 8 2012 08:00:00 AM'}];

  var sortedArray = array.sort((a,b) => Date.parse(new Date(a.date)) - Date.parse(new Date(b.date)));

带日期的字符串在JavaScript中是可比较的(如果它们在语法上相同),例如:

'2020-12-01' < '2020-12-02' == true

这意味着你可以在自定义排序函数中使用这个表达式:

var arr = [{id: 1、日期:“2020-12-01”},{id: 1、日期:“2020-12-15”},{id: 1、日期:' 2020-12-12 '}) 函数sortByDate(a, b) { 如果(a.date < b.date) { 返回1; } If (a.date > b.date) { 返回1; } 返回0; } const sorted = arrr .sort(sortByDate); console.log(排序);

谢谢上面那些精彩的回答。我想了一个有点复杂的答案。只是给那些想比较不同答案的人。

const data = [
    '2-2018', '1-2018',
    '3-2018', '4-2018',
    '1-2019', '2-2019',
    '3-2019', '4-2019',
    '1-2020', '3-2020',
    '4-2020', '1-2021'
]

let eachYearUniqueMonth = data.reduce((acc, elem) => {
    const uniqueDate = Number(elem.match(/(\d+)\-(\d+)/)[1])
    const uniqueYear = Number(elem.match(/(\d+)\-(\d+)/)[2])


    if (acc[uniqueYear] === undefined) {
        acc[uniqueYear] = []        
    } else{    
       if (acc[uniqueYear]  && !acc[uniqueYear].includes(uniqueDate)) {
          acc[uniqueYear].push(uniqueDate)
      }
    }

    return acc;
}, {})


let group = Object.keys(eachYearUniqueMonth).reduce((acc,uniqueYear)=>{
    eachYearUniqueMonth[uniqueYear].forEach(uniqueMonth=>{
    acc.push(`${uniqueYear}-${uniqueMonth}`)
  })
  
  return acc;
},[])

console.log(group);   //["2018-1", "2018-3", "2018-4", "2019-2", "2019-3", "2019-4", "2020-3", "2020-4"]


我有一个对象数组,其中关键“时间”包含ISO格式的日期

示例- 2021-12-24T11:02:20.370705

arr.sort(function(a,b){return a.time > b.time ? 1 : a.time < b.time ? -1 : 0 });

上面的工作对我来说就像一个魅力!