gpt4 book ai didi

javascript - 按 3 个键排序 - Javascript

转载 作者:行者123 更新时间:2023-12-01 03:41:07 24 4
gpt4 key购买 nike

目前我有一个数组,我想按 3 个键排序。为简单起见,该数组如下所示:

bArray = [ 
{StartDate:"Mar 1, 2017", ID:"ABC-001", Serial:"10000", Qty: "1"},
{StartDate:"Jun 3, 2017", ID:"CDE-001", Serial:"10004", Qty: "1"},
{StartDate:"Mar 1, 2017", ID:"ABC-002", Serial:"10001", Qty: "3"},
{StartDate:"Apr 2, 2017", ID:"CDE-001", Serial:"10003", Qty: "1"},
{StartDate:"Mar 1, 2017", ID:"ABC-001", Serial:"10002", Qty: "1"},
]

我想按所有 3 个键升序排序。首先按日期,然后按 ID,然后按序列。

我设法让它适用于日期和 ID,但是,当我在代码中添加序列比较时,我得到了意外的结果,其中 ID 和序列可能存在异常。例如,当我运行代码时,它可能会像这样排序:

bArray = [ 
{StartDate:"Mar 1, 2017", ID:"ABC-001", Serial:"10000", Qty: "1"},
{StartDate:"Mar 1, 2017", ID:"ABC-002", Serial:"10001", Qty: "3"},
{StartDate:"Mar 1, 2017", ID:"ABC-001", Serial:"10002", Qty: "1"},
{StartDate:"Apr 2, 2017", ID:"CDE-001", Serial:"10003", Qty: "1"},
{StartDate:"Jun 3, 2017", ID:"CDE-001", Serial:"10004", Qty: "1"}
]

第二行和第三行应该颠倒,因为 ID 应优先于 Serial。

我的代码如下:

bArray.sort(function (c,d){
if (c.StartDate > d.StartDate) { return 1; }
else if (d.StartDate < c.StartDate) { return -1; }

if (c.ID > d.ID) { return 1; }
else if (d.ID < c.ID) { return -1; }

if (c.Serial > d.Serial) { return 1; }
else if (d.Serial < c.Serial) { return -1; }
else { return 0; }
});

我还想提一下,我正在排序的数组超过 100 行。

非常感谢任何见解。

谢谢,文森特

最佳答案

您的比较都是形式

if ( c.X > d.X ) { return 1; }
else if ( d.X < c.X ) { return -1; }

这永远不会返回-1;如果 c.X > d.X,则 d.X < c.X,但您已经返回 1。

相反,您应该有 cd按照相同的顺序:

if ( c.X > d.X ) { return 1; }
else if ( c.X < d.X ) { return -1; }
// -------^-----^

(或者您可以在 else 中将它们颠倒,并使用 > 而不是 < 。)

关于javascript - 按 3 个键排序 - Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43874345/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com