Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript/Node.Js中二维数组中的按对象属性排序_Javascript_Arrays_Json_Node.js_Sorting - Fatal编程技术网

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:感谢您提供的提示,只保留正则表达式的值:)