目前我有一个数组,我想按3键排序。为简单起见,阵列看起来像这样:3键排序 - Javascript
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应该优先于编号:例如,它可以是这样,当我运行的代码进行排序。
我的代码如下:
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条+线。
任何有识之士都非常感谢。
感谢, 文森特
你有没有意识到你是通过串排序日期,而不是日期?串行按字符串排序,而不是数字排序。 – epascarello
日期正常工作 - 它们是真实场景中的日期数据类型 串行可以是字符串或数字或两者的组合 –