按日期javascript对JSON数据进行排序
Sort JSON data by date javascript
我正在尝试按date对json数据进行排序,但不起作用。这是我正在尝试的。请纠正我犯错误的地方
样本代码
var temp = [{
"id": 17608,
"title": "abc",
"start": "2016-03-23 06:13:00.0",
"backgroundColor": "#000000",
"borderColor": "#000000",
"textColor": "#fff"
}, {
"id": 17608,
"title": "def",
"start": "2016-04-13 06:13:00.0",
"backgroundColor": "#000000",
"borderColor": "#000000",
"textColor": "#fff"
}, {
"id": 17608,
"title": "ghi",
"start": "2016-04-08 06:13:00.0",
"backgroundColor": "#000000",
"borderColor": "#000000",
"textColor": "#fff"
}];
console.log(temp);
temp.sort(function(a, b) {
if (new Date(a.start) == new Date(b.start)) {
return a.row == b.row ? 0 : +a.row > +b.row ? 1 : -1;
}
return new Date(a.start) > (b.start) ? 1 : -1;
});
console.log(temp);
您可以使用日期字符串进行排序,因为它是ISO 6801日期。
var temp = [{ "id": 17608, "title": "abc", "start": "2016-03-23 06:13:00.0", "backgroundColor": "#000000", "borderColor": "#000000", "textColor": "#fff" }, { "id": 17608, "title": "def", "start": "2016-04-13 06:13:00.0", "backgroundColor": "#000000", "borderColor": "#000000", "textColor": "#fff" }, { "id": 17608, "title": "ghi", "start": "2016-04-08 06:13:00.0", "backgroundColor": "#000000", "borderColor": "#000000", "textColor": "#fff" }];
temp.sort(function (a, b) {
return a.start.localeCompare(b.start);
});
document.write("<pre>" + JSON.stringify(temp, 0, 4) + "</pre>");
在比较日期时应使用date.getTime()
。
var temp= [{id:17608,title:"abc",start:"2016-03-23 06:13:00.0",backgroundColor:"#000000",borderColor:"#000000",textColor:"#fff"},{id:17608,title:"def",start:"2016-04-13 06:13:00.0",backgroundColor:"#000000",borderColor:"#000000",textColor:"#fff"},{id:17608,title:"ghi",start:"2016-04-08 06:13:00.0",backgroundColor:"#000000",borderColor:"#000000",textColor:"#fff"}];
console.log(temp);
temp.sort(function(a, b) {
var d1 = new Date(a.start).getTime();
var d2 = new Date(b.start).getTime();
return d1<d2?-1:d1>d2?1:0;
});
console.log(temp);
您的代码很好,只是您在比较中缺少了第二个new Date()
:
return new Date(a.start) > (b.start) ? 1 : -1;
应为:
return new Date(a.start) > new Date(b.start) ? 1 : -1;
按照现在的方式,您只需将Date
对象与string
进行比较。
实现这一点有多种方法。其中,最简单的方法是将字符串转换为日期,并将它们相互减去,得到负数、正数或零:
temp.sort(function(a,b){
return new Date(a.start) - new Date(b.start);
});
通常认为排序函数需要返回-1
、1
或0
。这根本不是真的。它将根据数字是正、负还是零对项目进行排序。ECMAScript规范将其描述为:
如果comparefn不是未定义的,那么它应该是一个接受两个参数x和y的函数,并且如果x<y、 如果x=y则为零,如果x>y则为正值。
完整示例:
var temp = [{
"id": 17608,
"title": "abc",
"start": "2016-03-23 06:13:00.0",
"backgroundColor": "#000000",
"borderColor": "#000000",
"textColor": "#fff"
}, {
"id": 17608,
"title": "def",
"start": "2016-04-13 06:13:00.0",
"backgroundColor": "#000000",
"borderColor": "#000000",
"textColor": "#fff"
}, {
"id": 17608,
"title": "ghi",
"start": "2016-04-08 06:13:00.0",
"backgroundColor": "#000000",
"borderColor": "#000000",
"textColor": "#fff"
}];
console.log(temp);
temp.sort(function(a,b){
// Convert strings to dates and substract.
// This way you get a value which is negative, positive or zero
return new Date(a.start) - new Date(b.start);
});
console.log(temp);
const groups = this.posts.reduce((groups, data) => {
const date = data.published_date.split(' ')[0];
if (!groups[date]) {
groups[date] = [];
}
groups[date].push(data);
return groups;
}, {});
// Edit: to add it in the array format instead
const groupArrays = Object.keys(groups).map((date) => {
return {
date,
posts: groups[date]
};
});
这样做,应该有效!
var temp = [{
"id": 17608,
"title": "abc",
"start": "2016-03-23 06:13:00.0",
"backgroundColor": "#000000",
"borderColor": "#000000",
"textColor": "#fff"
}, {
"id": 17608,
"title": "def",
"start": "2016-04-13 06:13:00.0",
"backgroundColor": "#000000",
"borderColor": "#000000",
"textColor": "#fff"
}, {
"id": 17608,
"title": "ghi",
"start": "2016-04-08 06:13:00.0",
"backgroundColor": "#000000",
"borderColor": "#000000",
"textColor": "#fff"
}];
const groups = this.temp.reduce((groups, data) => {
const date = data.start.split(' ')[0];
if (!groups[date]) {
groups[date] = [];
}
groups[date].push(data);
return groups;
}, {});
// Edit: to add it in the array format instead
const groupArrays = Object.keys(groups).map((date) => {
return {
date,
temps: groups[date]
};
});
console.log(groupArrays)
var temp = [{
"id": 17608,
"title": "abc",
"start": "2016-03-23 06:13:00.0",
"backgroundColor": "#000000",
"borderColor": "#000000",
"textColor": "#fff"
}, {
"id": 17608,
"title": "def",
"start": "2016-04-13 06:13:00.0",
"backgroundColor": "#000000",
"borderColor": "#000000",
"textColor": "#fff"
}, {
"id": 17608,
"title": "ghi",
"start": "2016-04-08 06:13:00.0",
"backgroundColor": "#000000",
"borderColor": "#000000",
"textColor": "#fff"
}];
console.log(temp);
temp.sort(function(a, b) {
return parseFloat(a.start) - parseFloat(b.start);
});
console.log(temp);
相关文章:
- 对角度数据表中括号内的数字进行排序
- 角度未排序数据
- 排序数据表
- AngularJs orderby 过滤器无法正确排序数据
- Magento网站-按选项排序:上下箭头与排序数据绑定,只需删除上下箭头即可
- (钛工作室)显示带有排序数据的表视图
- 如何在D3折线图中禁用X轴上的排序数据
- 如何提高Highcharts的性能并避免排序数据出现错误15
- 可排序数据和更新数据库问题
- 使用Laravel 4+从jQuery/ajax保存串行可排序数据
- JavaScript中高效的排序数据结构
- 预排序数据或Angular orderBy哪个性能更好
- HandsonTable通过从ajax加载排序数据
- 在angularJS中排序数据
- Mithril.js:如果视图使用子组件,排序数据不会重新渲染
- 在MemoryStore(或任意数据数组)中排序数据
- js动态改变排序数据值
- 从json中排序数据
- DC/交叉过滤器行图排序数据,馈送图表
- 我如何排序数据表列,其中包含十进制值与$符号- JQuery数据表