Javascript将数组排序与日期值合并,产生意外结果

Javascript将数组排序与日期值合并,产生意外结果,javascript,arrays,sorting,date,object,Javascript,Arrays,Sorting,Date,Object,首先,如果这个问题不相关,我很抱歉。我不熟悉ecma和javascript。 我有两个物体 我想合并它们并用日期字段排序。与.push()完美合并,但当我尝试使用add\u date值对其进行排序时,会得到意外的结果 第一个目标: [ { "type": "Sipari\u015f - # PKXLF1", "note": "", "add_date": "2019-01-07 01:35:25", "value": 448

首先,如果这个问题不相关,我很抱歉。我不熟悉ecma和javascript。 我有两个物体

我想合并它们并用日期字段排序。与
.push()
完美合并,但当我尝试使用
add\u date
值对其进行排序时,会得到意外的结果

第一个目标:

[
    {
        "type": "Sipari\u015f - # PKXLF1",
        "note": "",
        "add_date": "2019-01-07 01:35:25",
        "value": 448.4
    },
    {
        "type": "Sipari\u015f - # PTO3U8",
        "note": "",
        "add_date": "2019-06-25 20:39:44",
        "value": 472
    },
    {
        "type": "Sipari\u015f - # PTYE1M",
        "note": "",
        "add_date": "2019-07-01 09:56:10",
        "value": 1320.77
    },
    {
        "type": "Sipari\u015f - # PXF079",
        "note": "",
        "add_date": "2019-09-06 16:57:09",
        "value": 1859.68
    },
    {
        "type": "Sipari\u015f - # PZ62E5",
        "note": "",
        "add_date": "2019-10-10 18:13:17",
        "value": 755.2
    }
]
第二对象

[
    {
        "type": "Tahsilat - Havale \/ Eft",
        "note": "Ziraat Bankas\u0131 Gelen Havale\/EFT",
        "add_date": "2019-01-22 01:35:25",
        "value": 448.4
    },
    {
        "type": "Tahsilat - Havale \/ Eft",
        "note": "Ziraat Bankas\u0131 Gelen Havale\/EFT",
        "add_date": "2019-08-02 20:24:57",
        "value": 1000
    },
    {
        "type": "Tahsilat - Havale \/ Eft",
        "note": "Ziraat Bankas\u0131 Gelen Havale\/EFT",
        "add_date": "2019-10-04 14:48:55",
        "value": 792
    }
]
到目前为止我所尝试的

这是公认的答案

array.sort(function(a,b){
  // Turn your strings into dates, and then subtract them
  // to get a value that is either negative, positive, or zero.
  return new Date(b.date) - new Date(a.date);
});
我试过了,但结果出乎意料,比如

0: {type: "Sipariş - # PKXLF1", note: "", add_date: "2019-01-07 01:35:25", value: 448.4}
1: {type: "Sipariş - # PTO3U8", note: "", add_date: "2019-06-25 20:39:44", value: 472}
2: {type: "Sipariş - # PTYE1M", note: "", add_date: "2019-07-01 09:56:10", value: 1320.77}
3: {type: "Sipariş - # PXF079", note: "", add_date: "2019-09-06 16:57:09", value: 1859.68}
4: {type: "Tahsilat - Havale / Eft", note: "Ziraat Bankası Gelen Havale/EFT", add_date: "2019-01-22 01:35:25", value: 448.4}
5: {type: "Tahsilat - Havale / Eft", note: "Ziraat Bankası Gelen Havale/EFT", add_date: "2019-08-02 20:24:57", value: 1000}
我错过了什么?我的
添加日期
字段是否有
错误的日期值


非常感谢任何帮助

您是否命名为合并数组?粘贴的排序方法有一个名为date的属性。您的对象具有属性“add_date”。将数组排序方法更改为类似以下内容:

const a=[
{
“类型”:“Sipari\u015f-#PKXLF1”,
“注:”,
“添加日期”:“2019-01-07 01:35:25”,
“价值”:448.4
},
{
“类型”:“Sipari\u015f-#PTO3U8”,
“注:”,
“添加日期”:“2019-06-25 20:39:44”,
“价值”:472
},
{
“类型”:“Sipari\u015f-#PTYE1M”,
“注:”,
“添加日期”:“2019-07-01 09:56:10”,
“价值”:1320.77
},
{
“类型”:“Sipari\u015f-#PXF079”,
“注:”,
“添加日期”:“2019-09-06 16:57:09”,
“价值”:1859.68
},
{
“类型”:“Sipari\u015f-#PZ62E5”,
“注:”,
“添加日期”:“2019-10-10 18:13:17”,
“价值”:755.2
}
];
常数b=[
{
“类型”:“塔西拉特-哈瓦莱\/Eft”,
“注”:“Ziraat Bankas\u0131 Gelen Havale\/EFT”,
“添加日期”:“2019-01-22 01:35:25”,
“价值”:448.4
},
{
“类型”:“塔西拉特-哈瓦莱\/Eft”,
“注”:“Ziraat Bankas\u0131 Gelen Havale\/EFT”,
“添加日期”:“2019-08-02 20:24:57”,
“价值”:1000
},
{
“类型”:“塔西拉特-哈瓦莱\/Eft”,
“注”:“Ziraat Bankas\u0131 Gelen Havale\/EFT”,
“添加日期”:“2019-10-04 14:48:55”,
“价值”:792
}
];
常数c=[…a,…b];
c、 排序(功能(a、b){
//将字符串转换为日期,然后减去它们
//获取负值、正值或零的值。
返回新日期(a.添加日期)-新日期(b.添加日期);
});

控制台日志(c)您必须将日期格式转换为时间戳。然后进行排序

对象中的日期字符串的格式可以按词汇进行排序,无需将其转换为日期

您可以简单地使用扩展语法
..
进行合并,并使用
进行排序,例如

let arrA=[
{“添加日期”:“2019-01-07 01:35:25”},
{“添加日期”:“2019-06-25 20:39:44”},
{“添加日期”:“2019-07-01 09:56:10”},
{“添加日期”:“2019-09-06 16:57:09”},
{“添加日期”:“2019-10-1018:13:17”}
];
设arrB=[
{“添加日期”:“2019-01-22 01:35:25”},
{“添加日期”:“2019-08-02 20:24:57”},
{“添加日期”:“2019-10-04 14:48:55”}
]
//首先使用最新日期进行合并和排序
让arrC=[…arrA,…arrB].sort((a,b)=>a.add_dateb.添加日期?-1:0);

控制台日志(arrC)谢谢你的回答。这就是我所做的,但它不起作用。如果运行上面的代码,数组将按开始日期排序。这不是预期的结果吗?事实上我得到了答案。这与分类无关。感谢您的努力。
newdate(a.add\u Date)
在至少一个常用浏览器中返回无效日期。ECMA-262不支持“2019-10-04 14:48:55”格式,因此解析取决于实现。操作日期的格式将正确排序,无需解析日期对象。“2019-10-10 18:13:17”是时间戳。