javascript - 对javascript对象的一部分进行排序
问题描述
我有一个 javascript 对象,如下所示。我必须在 AddressTotal 下对数据进行排序,仅检查以下顺序。1. 如果任何元素具有“Prime”:true 则首先将其放在 AddressTotal 下。2. 如果没有 "Prime":true ,则对 "Createdate" 进行降序排序。
请注意,“Createdate”格式很好,因为我可以处理。
var x = {
"accts": [{
"Id": "Acc1",
"Person": true,
"Name": "Hello Roy",
"ExternalID": "123456",
"AddressTotal": [{
"Account": "Acc1",
"Id": "Ad3",
"Name": "1 camac Street",
"City": "Chennai",
"State": "KN",
"Zip": "23451",
"AddType": "office",
"Prime": false,
"RecTypeId": "R3",
"Createdate": "5th Feb 2018"
}, {
"Account_vod__c": "Acc2",
"Id": "Ad2",
"Name": "1 strand Road",
"City": "Mumbai",
"State": "JK",
"Zip": "12345",
"AddType": "College",
"Prime": false,
"RecTypeId": "R2",
"Createdate": "2nd Feb 2018"
}, {
"Account": "Acc1",
"Id": "Ad1",
"Name": "1 Park Street",
"City": "Bangalore",
"State": "TN",
"Zip": "74324",
"AddType": "School",
"Prime": true,
"RecTypeId": "R1",
"Createdate": "1st Feb 2018"
}
],
"Rectype": {
"Name": "ABC",
"Id": "Id1"
}
}
],
"hasAccess": ["A1"]
}
有人可以建议我一个出路吗?
解决方案
这是一个非常标准的排序问题。
从两个元素的质数测试开始,并以比较Date
创建日期的值结束。
您不能Createdate
直接比较,因为这会导致两个字符串的字母比较,而不是时间戳的数学比较。
var x = {
"accts": [{
"Id": "Acc1",
"Person": true,
"Name": "Hello Roy",
"ExternalID": "123456",
"AddressTotal": [{
"Account": "Acc1",
"Id": "Ad3",
"Name": "1 camac Street",
"City": "Chennai",
"State": "KN",
"Zip": "23451",
"AddType": "office",
"Prime": false,
"RecTypeId": "R3",
"Createdate": "5th Feb 2018"
}, {
"Account_vod__c": "Acc2",
"Id": "Ad2",
"Name": "1 strand Road",
"City": "Mumbai",
"State": "JK",
"Zip": "12345",
"AddType": "College",
"Prime": false,
"RecTypeId": "R2",
"Createdate": "2nd Feb 2018"
}, {
"Account": "Acc1",
"Id": "Ad1",
"Name": "1 Park Street",
"City": "Bangalore",
"State": "TN",
"Zip": "74324",
"AddType": "School",
"Prime": true,
"RecTypeId": "R1",
"Createdate": "1st Feb 2018"
}],
"Rectype": {
"Name": "ABC",
"Id": "Id1"
}
}],
"hasAccess": ["A1"]
};
//TEST
var arr = x.accts[0].AddressTotal.sort(function sorter(a, b) {
if (a.Prime) {
return -1;
}
if (b.Prime) {
return 1;
}
return new Date(a.Createdate).getTime() - new Date(b.Createdate).getTime();
});
console.log(arr);
顺便说一句,有没有理由accts
是一个数组而不仅仅是一个对象?
推荐阅读
- php - 访客登录看不到感谢页面
- javascript - 如何比较两个大对象数组的身份
- java - PG JDBC 驱动程序中的错误 - MONEY DB 类型(双精度类型的错误值)
- python-2.7 - Solr 查询不适用于字段类型“文本”
- java - Java 9 JPMS 可以与 SPI 一起使用以在运行时动态加载插件吗?
- scala - 如何从 EMR 连接到 GCS
- python - sqlalchemy:hybrid_property 的布尔表达式
- python - 如何处理没有值的 XML 属性?
- azure - 使用 Azure 设备预配服务的 REST API 注册设备?
- r - R折叠并自动填充行中的空白