繁体   English   中英

javascript数组仅在第一列上对二维数组进行排序

[英]javascript array sort 2d array on first column only

我已经检查了一堆解决方案,但似乎没有任何帮助。

这是我在 Javascript 中的数组

[
{"1/2/2015",344},
{"1/3/2015",444},
{"1/2/2015",544},
{"1/3/2015",44},
{"1/2/2015",34},
{"1/3/2015",340}
]

我希望它按第一列(日期)排序,而不按第二列(计数)排序(即保持给定日期计数的当前顺序)。 javascript sort() 函数似乎按日期排序,然后按计数排序,这是不可取的。 所需的输出是

[
{"1/2/2015",344},
{"1/2/2015",544},
{"1/2/2015",34},
{"1/3/2015",444},
{"1/3/2015",44},
{"1/3/2015",340}
]

任何解决这个问题的指针都值得赞赏。

谢谢

首先,您需要一些东西来可靠地解析日期字符串。 您可以使用库,但一个简单的函数是 2 行(假设日期有效)。 然后使用排序函数:

 // Parse date string in format d/m/y function parseDMY(s) { var b = s.split(/\\D/); return new Date(b[2],b[1]-1,b[0]); } var data = [ ["1/2/2015",344], ["1/3/2015",444], ["1/2/2015",544], ["1/3/2015",44], ["1/2/2015",34], ["1/3/2015",340] ]; console.log(data.sort(function(a, b){ return parseDMY(a[0]) - parseDMY(b[0]); }));

您的语法不正确:内部对象无效。 在您指定的注释中,您有内部数组,因此它们需要方括号而不是大括号。

解决方案可能是创建一个副本并将原始数组索引添加到数据中,然后进行自定义排序,将该索引作为二级排序标准,然后从最终结果中删除该索引:

 var data = [ ["10/02/2015",3351], ["10/03/2015",7273], ["10/04/2015",8609], ["10/05/2015",8941], ["10/06/2015",7493], ["10/07/2015",8030], ["10/08/2015",10545], ["10/02/2015",335], ["10/03/2015",727], ["10/04/2015",860], ["10/05/2015",894], ["10/06/2015",749], ["10/07/2015",803], ["10/08/2015",1055], ["10/02/2015",1351], ["10/03/2015",1273], ["10/04/2015",1609], ["10/05/2015",1941], ["10/06/2015",1493], ["10/07/2015",1030], ["10/08/2015",1545] ]; data = data.map( (o, i) => [o, Date.parse(o[0]), i] ) .sort( (a, b) => a[1] - b[1] || a[2] - b[2] ) .map ( a => a[0] ); console.log(data);
 .as-console-wrapper { max-height: 100% !important; top: 0; }

最后一点:确保您的日期格式正确,以便Date.parse方法能够理解

我强烈建议在您的字符串中使用 ISO 格式YYYY-MM-DD以避免误解。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM