Javascript 按动态键对嵌套对象数组排序

Javascript 按动态键对嵌套对象数组排序,javascript,lodash,Javascript,Lodash,我相信我对这个问题的措辞是正确的。。。。我有一个这样的数据集 [ { "Fri Aug 03 2018 00:00:00 GMT-0500": { "bill": "Test 2", "account": "defaultAccount", "amount": 40, "category": "defaultCategory", "description": "231" } }, { "Fri Aug

我相信我对这个问题的措辞是正确的。。。。我有一个这样的数据集

[
  {
    "Fri Aug 03 2018 00:00:00 GMT-0500": {
      "bill": "Test 2",
      "account": "defaultAccount",
      "amount": 40,
      "category": "defaultCategory",
      "description": "231"
    }
  },
  {
    "Fri Aug 17 2018 00:00:00 GMT-0500": {
      "bill": "Test 2",
      "account": "defaultAccount",
      "amount": 40,
      "category": "defaultCategory",
      "description": "231"
    }
  },
  {
    "Wed Aug 01 2018 00:00:00 GMT-0500": {
      "bill": "test",
      "account": "create-account",
      "amount": 40,
      "category": "mortgage",
      "description": "23"
    }
  }, ....
]
我正在努力根据对象的动态日期对数组进行排序。
在过去的几个小时里,我一直在研究这个关于堆栈溢出的问题的每一个版本,但我没有想出一个解决方案。。。非常感谢您的建议

您需要获取每个外部对象的键并获取一个日期对象。然后取delta进行排序

var数组=[{“2018年8月3日星期五00:00:00 GMT-0500”:{账单:“测试2”,账户:“defaultAccount”,金额:40,类别:“defaultCategory”,描述:“231”},{“2018年8月17日星期五00:00:00 GMT-0500”:{账单:“测试2”,账户:“defaultAccount”,金额:40,类别:“defaultCategory”,描述:“231”},{“2018年8月1日星期三00:00:00 GMT-0500”:{账单:“测试”,账户:“创建账户”,金额:40,类别:“抵押”,描述:“23”}];
array.sort((a,b)=>新日期(Object.keys(a)[0])-新日期(Object.keys(b)[0]);
console.log(数组);

。作为控制台包装{max height:100%!important;top:0;}
我将使用函数执行以下操作:

import _ from "lodash";

var array = [
  {
    "Fri Aug 03 2018 00:00:00 GMT-0500": {
      bill: "Test 2",
      account: "defaultAccount",
      amount: 40,
      category: "defaultCategory",
      description: "231"
    }
  },
  {
    "Fri Aug 17 2018 00:00:00 GMT-0500": {
      bill: "Test 2",
      account: "defaultAccount",
      amount: 40,
      category: "defaultCategory",
      description: "231"
    }
  },
  {
    "Wed Aug 01 2018 00:00:00 GMT-0500": {
      bill: "test",
      account: "create-account",
      amount: 40,
      category: "mortgage",
      description: "23"
    }
  }
];

const result = _.sortBy(array, [
  function(o) {
    return new Date(Object.keys(o)[0]);
  }
]);

console.log(result);

链接。

尝试以稍微不同的方式格式化对象,如下所示:

[{
    "createdon": "Fri Aug 03 2018 00:00:00 GMT-0500",
    "bill": "Test 2",
    "account": "defaultAccount",
    "amount": 40,
    "category": "defaultCategory",
    "description": "231"
  },
  {
    "createdon": "Fri Aug 17 2018 00:00:00 GMT-0500",
    "bill": "Test 2",
    "account": "defaultAccount",
    "amount": 40,
    "category": "defaultCategory",
    "description": "231"

  },
  {
    "createdon": "Wed Aug 01 2018 00:00:00 GMT-0500",
    "bill": "test",
    "account": "create-account",
    "amount": 40,
    "category": "mortgage",
    "description": "23"
  }
]
这更符合逻辑,因为数组中的索引已经是标识每个对象的键,因此不需要将日期用作键

下面是一个完整的示例:

var data = [{
    "createdon": "Fri Aug 03 2018 00:00:00 GMT-0500",
    "bill": "Test 2",
    "account": "defaultAccount",
    "amount": 40,
    "category": "defaultCategory",
    "description": "231"
  },
  {
    "createdon": "Fri Aug 17 2018 00:00:00 GMT-0500",
    "bill": "Test 2",
    "account": "defaultAccount",
    "amount": 40,
    "category": "defaultCategory",
    "description": "231"

  },
  {
    "createdon": "Wed Aug 01 2018 00:00:00 GMT-0500",
    "bill": "test",
    "account": "create-account",
    "amount": 40,
    "category": "mortgage",
    "description": "23"
  }
]

result = _.sortBy(data, [
  function(o) {
    return new Date(o.createdon);
  }
])

即使其他答案都有效,这种方法也会产生更干净、更清晰、更易于维护的代码,这也是编程中非常重要的一部分。

这是一种使用lodash以非常简洁的方式实现的方法:

var数组=[{“2018年8月3日星期五00:00:00 GMT-0500”:{账单:“测试2”,账户:“defaultAccount”,金额:40,类别:“defaultCategory”,描述:“231”},{“2018年8月17日星期五00:00:00 GMT-0500”:{账单:“测试2”,账户:“defaultAccount”,金额:40,类别:“defaultCategory”,描述:“231”},{2018年8月1日星期三00:00:00 GMT-0500:{账单:“测试”,账户:“创建账户”,金额:40,类别:“抵押”,描述:“23”}];
console.log(u.sortBy(array,(x)=>新日期(u.head(u.keys(x‘‘)));

你为什么要把日期作为键呢?就是这样!非常感谢!既然允许使用lodash(问题用它标记),似乎你可以只做
\uu.sortBy(数组,(x)=>新日期(u.head(u.keys(x)))
我继续按照您建议的方式重新格式化,希望避免将来出现任何问题。谢谢!您明白为什么吗?这更重要。