首页 > 解决方案 > 对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"]
}

有人可以建议我一个出路吗?

标签: javascriptjsonstringsorting

解决方案


这是一个非常标准的排序问题

从两个元素的质数测试开始,并以比较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是一个数组而不仅仅是一个对象?


推荐阅读