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)))
我继续按照您建议的方式重新格式化,希望避免将来出现任何问题。谢谢!您明白为什么吗?这更重要。