在Javascript / Node.Js中以二维数组的对象属性sorting

我正在分析日志文件,我希望通过降序排列请求来更容易阅读。 问题是,我有一个二维数组与每个对象,我想通过其中一个对象属性(平均响应时间在这里)sorting数组,我不知道如何访问它…

以下是您要了解的最后一个日志文件:

[ [ { "Request": "/sql/sqlweb/", "Average response time": "2.685 ms", "Number of calls": 1 } ], [ { "Request": "/", "Average response time": "1.219 ms", "Number of calls": 2529 } ], [ { "Request": "/mysql/admin/", "Average response time": "4.086 ms", "Number of calls": 1 } ], [ { "Request": "/mysql/sqlmanager/", "Average response time": "2.774 ms", "Number of calls": 1 } ], [ { "Request": "/phpmyadmin/", "Average response time": "2.417 ms", "Number of calls": 2 } ] ] 

这是在我的数组上的JSON.stringify()之后。 如果需要,我也可以复制/粘贴我的代码的当前版本。

Ps:如果有帮助,我可以很容易地删除“ms”。

你可以采取内部数组的第一个对象,然后需要的属性进行sorting。

 var array = [[{ Request: "/sql/sqlweb/", "Average response time": "2.685 ms", "Number of calls": 1 }], [{ Request: "/", "Average response time": "1.219 ms", "Number of calls": 2529 }], [{ Request: "/mysql/admin/", "Average response time": "4.086 ms", "Number of calls": 1 }], [{ Request: "/mysql/sqlmanager/", "Average response time": "2.774 ms", "Number of calls": 1 }], [{ Request: "/phpmyadmin/", "Average response time": "2.417 ms", "Number of calls": 2 }]]; array.sort(function (a, b) { function getV(o) { return o[0]['Average response time'].match(/\d+\.?\d*/); } return getV(b) - getV(a); }); console.log(array); 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

你可以使用sort() ,你可以编写一个比较函数,在这个函数中,你可以使用平均响应时间比较数组中的对象,为此可以使用parseFloat()

 var arr = [ [ { "Request": "/sql/sqlweb/", "Average response time": "2.685 ms", "Number of calls": 1 } ], [ { "Request": "/", "Average response time": "1.219 ms", "Number of calls": 2529 } ], [ { "Request": "/mysql/admin/", "Average response time": "4.086 ms", "Number of calls": 1 } ], [ { "Request": "/mysql/sqlmanager/", "Average response time": "2.774 ms", "Number of calls": 1 } ], [ { "Request": "/phpmyadmin/", "Average response time": "2.417 ms", "Number of calls": 2 } ] ]; arr.sort(function(a,b){ return parseFloat(a[0]["Average response time"]) - parseFloat(b[0]["Average response time"]); }); console.log(arr); 

你可以这样做:

 [ [ { "Request": "/sql/sqlweb/", "Average response time": "2.685 ms", "Number of calls": 1 } ], [ { "Request": "/", "Average response time": "1.219 ms", "Number of calls": 2529 } ], [ { "Request": "/mysql/admin/", "Average response time": "4.086 ms", "Number of calls": 1 } ], [ { "Request": "/mysql/sqlmanager/", "Average response time": "2.774 ms", "Number of calls": 1 } ], [ { "Request": "/phpmyadmin/", "Average response time": "2.417 ms", "Number of calls": 2 } ] ].sort(function(a, b) { return Number(a[0]["Average response time"].replace(/[^0-9]+/g, "")) - Number(b[0]["Average response time"].replace(/[^0-9]+/g, "")); }); 

你需要用一个自定义的比较器来使用array.sort。