请帮我整理。 我必须使用自定义字符串日期对对象进行排序
var object = [{
name: "something",
date: "23.12.2016"
},
{
name: "something2",
date: "19.12.2016"
}]
这样的排序对象怎么样?
我已经尝试过使用sort函数return new Date(a.date) - new Date(b.date);
但没有任何东西它不起作用
谢谢!
答案 0 :(得分:2)
您可以拆分日期并将其重新排列为iso日期,并按localeCompare
字符串排序。
var object = [{ name: "something", date: "23.12.2016" }, { name: "something2", date: "19.12.2016" }];
object.sort(function (a, b) {
var aa = a.date.split('.'),
bb = b.date.split('.');
return [aa[2], aa[1], aa[0]].join('-').localeCompare([bb[2], bb[1], bb[0]].join('-'));
});
console.log(object);
您也可以使用String#replace
重新排序字符串。
var object = [{ name: "something", date: "23.12.2016" }, { name: "something2", date: "19.12.2016" }];
object.sort(function (a, b) {
var aa = a.date.replace(/(..).(..).(....)/, '$3-$2-$1'),
bb = b.date.replace(/(..).(..).(....)/, '$3-$2-$1');
return aa.localeCompare(bb);
});
console.log(object);
答案 1 :(得分:1)
使用Date.parse()
和String.prototype.replace()
函数的解决方案(按 时间戳 排序):
var date_objects = [{ name: "something", date: "23.12.2016" }, { name: "something2", date: "19.12.2016" }];
date_objects.sort(function(a,b){
return Date.parse(a.date.replace(/^(\d{2})\.(\d{2})\.(\d{4})$/, '$3-$2-$1'))
- Date.parse(b.date.replace(/^(\d{2})\.(\d{2})\.(\d{4})$/, '$3-$2-$1'))
});
console.log(date_objects);

答案 2 :(得分:1)
出于好奇,我尝试了一个关于Nina Scholz's answer的变体,也许它更快,也许不是。我发现重新格式化日期非常明显,但它也很耗时。在我的版本中,重复索引可能是一个问题,但是as you stated that the format is zero-padded,这将起作用:
var object = [{ name: "something", date: "23.12.2016" }, { name: "something2", date: "19.12.2016" }];
object.sort(function (a, b) {
return (a.date[6] - b.date[6])
|| (a.date[7] - b.date[7])
|| (a.date[8] - b.date[8])
|| (a.date[9] - b.date[9])
|| (a.date[3] - b.date[3])
|| (a.date[4] - b.date[4])
|| (a.date[0] - b.date[0])
|| (a.date[1] - b.date[1]);
});
console.log(object);