【问题标题】:Sorting array with date types使用日期类型对数组进行排序
【发布时间】:2017-05-15 15:05:19
【问题描述】:

对此还是陌生的。尝试对具有 Date 类型的对象数组进行排序时遇到问题。例如:我有 3 辆车:(名称,首次注册日期(类型日期))。如何对这个数组进行排序?我应该将日期更改为字符串吗?谢谢。

function car(Make, Model, Date) {
  return Make + Model + Date;
}
var date1 = '2010';
var date2 = '2003';
var date3 = '2015';

var d1 = new Date(date1);
var d2 = new Date(date2);
var d3 = new Date(date3);

var n1 = d1.getFullYear();
var n2 = d2.getFullYear();
var n3 = d3.getFullYear();

var x = car('Mercedes', ' c220 ', n1);
var y = car(' Toyota', ' Prius ', n2);
var z = car(' Audi', ' a3 ', n3);
var polje = [x, y, z];

console.log(polje);
.as-console-wrapper { top: 0 }

【问题讨论】:

标签: javascript arrays sorting date


【解决方案1】:

您可以将Date#toISOString 用于带有String#localeCompare 的可排序字符串。

然后你可以用它来排序

var array = [
        { make: 'Mercedes', model: 'c220', date : new Date('2010') },
        { make: 'Toyota', model: 'Prius', date : new Date('2003') },
        { make: 'Audi', model: 'a3', date : new Date('2015') }
    ];

array.sort(function (a, b) {
    return a.date.toISOString().localeCompare(b.date.toISOString());
});

console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }

带有

的版本
  • firstRegistration,描述,
  • 制作,升序,
  • 型号,升序

var array = [
        { make: 'Mercedes', model: 'c220', firstRegistration: 2010 },
        { make: 'Toyota', model: 'Prius', firstRegistration: 2015 },
        { make: 'Audi', model: 'a3', firstRegistration: 2015 }
    ];

array.sort(function (a, b) {
    return b.firstRegistration - a.firstRegistration ||
        a.make.localeCompare(b.make) ||
        a.model.localeCompare(b.model);
});

console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

  • 非常感谢!添加问题:我如何使日期仅显示年份?只是为了更好地查看输出:)
  • 你可以使用Date#getYear
  • 您可以删除所有日期处理并获得相同的结果。 date 字段应该是 yearOfManufacture 并且是一个数字,例如 2010。但是,嘿,它“有效”。 ;-)
猜你喜欢
  • 2013-07-20
  • 1970-01-01
  • 1970-01-01
  • 2021-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-18
  • 1970-01-01
相关资源
最近更新 更多