Javascript/Node.Js中二维数组中的按对象属性排序
我正在分析日志文件,我希望通过按降序对请求进行排序,使其更易于阅读。问题是我有一个二维数组,每个数组中都有一个对象,我想根据数组的对象属性(这里的平均响应时间)对数组进行排序,但我不知道如何访问它 以下是最后一份日志文件,供您理解:Javascript/Node.Js中二维数组中的按对象属性排序,javascript,arrays,json,node.js,sorting,Javascript,Arrays,Json,Node.js,Sorting,我正在分析日志文件,我希望通过按降序对请求进行排序,使其更易于阅读。问题是我有一个二维数组,每个数组中都有一个对象,我想根据数组的对象属性(这里的平均响应时间)对数组进行排序,但我不知道如何访问它 以下是最后一份日志文件,供您理解: [ [ { "Request": "/sql/sqlweb/", "Average response time": "2.685 ms", "Number of call
[
[
{
"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”。您可以获取内部数组的第一个对象,然后获取想要的属性进行排序
var-array=[{Request:“/sql/sqlweb/”,“平均响应时间”:“2.685毫秒”,“调用数”:1}],{Request:“/”,“平均响应时间”:“1.219毫秒”,“调用数”:2529}],{Request:“/mysql/admin/”,“平均响应时间”:“4.086毫秒”,“调用数”:1}],{Request:“/mysql/sqlmanager/”,“平均响应时间”:“2.774毫秒”,“呼叫数”:1}],{请求:“/phpmyadmin/”,“平均响应时间”:“2.417毫秒”,“呼叫数”:2}];
array.sort(函数(a,b){
函数getV(o){
返回o[0]['Average response time'].match(/\d+\.?\d*/);
}
返回getV(b)-getV(a);
});
console.log(数组);
。作为控制台包装器{max height:100%!important;top:0;}
您可以使用sort()
,您可以编写一个比较器函数,在该函数中,您可以使用数组中的平均响应时间来比较数组中的对象,为此您可以使用parseFloat()
var-arr=[
[
{
“请求”:“/sql/sqlweb/”,
“平均响应时间”:“2.685 ms”,
“通话次数”:1
}
],
[
{
“请求”:“/”,
“平均响应时间”:“1.219毫秒”,
“通话次数”:2529
}
],
[
{
“请求”:“/mysql/admin/”,
“平均响应时间”:“4.086 ms”,
“通话次数”:1
}
],
[
{
“请求”:“/mysql/sqlmanager/”,
“平均响应时间”:“2.774 ms”,
“通话次数”:1
}
],
[
{
“请求”:“/phpmyadmin/”,
“平均响应时间”:“2.417毫秒”,
“通话次数”:2
}
]
];
arr.sort(函数(a,b){
返回parseFloat(a[0][“平均响应时间”])-parseFloat(b[0][“平均响应时间”]);
});
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与自定义比较器一起使用。您想对内部数组进行排序吗?因此结果将类似于此(二维数组),但对内部数组进行了排序。或者您想要一个最终的数组(一维),其中对象将按排序顺序出现?实际上,我最终通过添加[0]找到了问题的答案索引,但还是要感谢您的快速回答!Ps:感谢您提供的提示,只保留正则表达式的值:)