Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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算法,用于按多个条件对对象中的数组进行排序_Javascript_Arrays_Algorithm_Object - Fatal编程技术网

JavaScript算法,用于按多个条件对对象中的数组进行排序

JavaScript算法,用于按多个条件对对象中的数组进行排序,javascript,arrays,algorithm,object,Javascript,Arrays,Algorithm,Object,我正在尝试编写一种算法,该算法根据第一列(名称)分组的每列的平均值对该表进行排序,以便该表仅显示具有最常见值的行。例如,这是当前表: 排序后应该是这样的: 这就是我试图排序的数组,只显示最常见的表值: var testArray = [ { "testName": "10b1", "SG": 1.010, "pH":6,

我正在尝试编写一种算法,该算法根据第一列(名称)分组的每列的平均值对该表进行排序,以便该表仅显示具有最常见值的行。例如,这是当前表:

排序后应该是这样的:

这就是我试图排序的数组,只显示最常见的表值:

            var testArray = [
            {
                "testName": "10b1",
                "SG": 1.010,
                "pH":6,
                "LEU": "NEG",
                "NIT": "NEG",
                "PRO": "NEG",
                "GLU": "NORM",
                "KET": "NEG",
                "UBG": "NORM",
                "BIL": "NEG",
                "Hb": "NEG"

            },
            {
                "testName": "10b1",
                "SG": 1.010,
                "pH":6,
                "LEU": "NEG",
                "NIT": "NEG",
                "PRO": "NEG",
                "GLU": "NORM",
                "KET": "NEG",
                "UBG": "NORM",
                "BIL": "NEG",
                "Hb": "NEG"
            },
            {
                "testName": "10b1",
                "SG": 1.010,
                "pH":6,
                "LEU": "NEG",
                "NIT": "NEG",
                "PRO": "NEG",
                "GLU": "NORM",
                "KET": "NEG",
                "UBG": "NORM",
                "BIL": "NEG",
                "Hb": "NEG"
            },
            {
                "testName": "10b1",
                "SG": 1.010,
                "pH":6,
                "LEU": "NEG",
                "NIT": "NEG",
                "PRO": "NEG",
                "GLU": "NORM",
                "KET": "NEG",
                "UBG": "NORM",
                "BIL": "NEG",
                "Hb": "NEG"
            },
            {
                "testName": "10b1",
                "SG": 1.010,
                "pH":6,
                "LEU": "NEG",
                "NIT": "NEG",
                "PRO": "NEG",
                "GLU": "NORM",
                "KET": "NEG",
                "UBG": "NORM",
                "BIL": "NEG",
                "Hb": "NEG"
            },
            {
                "testName": "10b1.5",
                "SG": 1.010,
                "pH":6,
                "LEU": "NEG",
                "NIT": "NEG",
                "PRO": "NEG",
                "GLU": 50,
                "KET": "NEG",
                "UBG": "NORM",
                "BIL": "NEG",
                "Hb": 50
            },
            {

                "testName": "10b1.5",
                "SG": 1.010,
                "pH":6,
                "LEU": "NEG",
                "NIT": "NEG",
                "PRO": "NEG",
                "GLU": 50,
                "KET": "NEG",
                "UBG": "NORM",
                "BIL": "NEG",
                "Hb": 50
            },
            {
                "testName": "10b1.5",
                "SG": 1.010,
                "pH":6,
                "LEU": "NEG",
                "NIT": "NEG",
                "PRO": "NEG",
                "GLU": 50,
                "KET": "NEG",
                "UBG": "NORM",
                "BIL": "NEG",
                "Hb": 50
            }
        ];
我尝试使用此算法,但返回的结果与预期结果相差甚远:

  var mf = 1;
        var m = 0;
        var item;
        var count = 1;
        for(let k = 0; k < testArray.length; k++){
            for(let v = 0; v < testArray[k].values.length; v++){
                 current = 1;
                for(j = v; j <= testArray[k].values.length; j++){
                    if(testArray[k].values[v] == testArray[k].values[j]){
                        m++;
                    }

                    if(mf < m){
                        mf=m;
                        item = testArray[k].values[v];
                        testArray[k].values = [];
                    }
                }
                    testArray[k].values[v] = item;

            }

        }
var mf=1;
var m=0;
var项目;
var计数=1;
for(设k=0;k对于(j=v;j,您可以循环遍历数组并创建一个嵌套对象,以根据名称、键以及每个键的值对数组进行分组。然后循环遍历此
计数的嵌套对象,并基于每个键的值的集合创建一个对象

这就是
计数对象的外观:

{
“10b1”:{
“SG”:{
"1.01": 5
},
“pH”:{
"6": 5
},
“LEU”:{
“负”:5
},
“NIT”:{
“负”:5
},
“专业”:{
“负”:5
},
“GLU”:{
“标准”:5
},
“基特”:{
“负”:5
},
“UBG”:{
“标准”:5
},
“比尔”:{
“负”:5
},
“Hb”:{
"10": 3,
“负”:2
}
},
“10b1.5”:{
“SG”:{
"1.01": 3
},
“pH”:{
"6": 3
},
“LEU”:{
“负”:3
},
“NIT”:{
“负”:3
},
“专业”:{
“负”:3
},
“GLU”:{
"50": 3
},
“基特”:{
“负”:3
},
“UBG”:{
“规范”:3
},
“比尔”:{
“负”:3
},
“Hb”:{
"50": 3
}
}

}
您可以在数组中循环并创建一个嵌套对象,以根据名称、键以及每个键的值对数组进行分组。然后循环此
计数的嵌套对象,并基于每个键的值的集合创建一个对象

这就是
计数对象的外观:

{
“10b1”:{
“SG”:{
"1.01": 5
},
“pH”:{
"6": 5
},
“LEU”:{
“负”:5
},
“NIT”:{
“负”:5
},
“专业”:{
“负”:5
},
“GLU”:{
“标准”:5
},
“基特”:{
“负”:5
},
“UBG”:{
“标准”:5
},
“比尔”:{
“负”:5
},
“Hb”:{
"10": 3,
“负”:2
}
},
“10b1.5”:{
“SG”:{
"1.01": 3
},
“pH”:{
"6": 3
},
“LEU”:{
“负”:3
},
“NIT”:{
“负”:3
},
“专业”:{
“负”:3
},
“GLU”:{
"50": 3
},
“基特”:{
“负”:3
},
“UBG”:{
“规范”:3
},
“比尔”:{
“负”:3
},
“Hb”:{
"50": 3
}
}

}
如果要“仅获取最常见的表值”,为什么输出有两行从每列?另外,请不要上载。无法复制数组的图像以创建答案,图像比文本更难阅读。请将实际代码作为文本发布以创建答案。我希望显示表中按名称分组的最常用值,因此对于每个名称,应显示最常用值,而表当前没有wo名称:“10b1”,“10b1.5”。因此,对于每个名称,我必须获得最常见的值。关于数组@adiga的照片,你是对的。我对图像感到非常抱歉。因此,我编辑了我的问题,并设置了当前数组,这是一个有效的JSON,现在可以用于编写示例解决方案。如果你想获得,为什么输出有两行“只有最常见的表值"从每列?另外,请不要上载。无法复制数组的图像以创建答案,图像比文本更难阅读。请将实际代码作为文本发布以创建答案。我希望显示表中按名称分组的最常用值,因此对于每个名称,应显示最常用值,而表当前没有wo名称:“10b1”,“10b1.5”。因此,对于每个名称,我必须获得最常见的值。您对数组@adiga的照片的看法是正确的。我对图像感到非常抱歉。因此,我编辑了我的问题并设置了当前数组,该数组是有效的JSON,现在可以用于编写示例解决方案。谢谢@adiga:),它的工作就像一个符咒。有没有办法返回已排序的数组,因为它是无序的。现在?@jorobash你所说的顺序是什么意思?它当前先显示
10b1
,然后显示
10b1.5
?因为这是原始数组中的顺序名称的顺序是正确的,我的意思是当我在浏览中测试代码时r这是工作,但“SG”、“pH”、“LEU”、“NIT”、“PRO”等的顺序是随机的。按如下方式返回它们:
0:{…}​​ 比尔:“负”​​ GLU:“正常”​​ 血红蛋白:“10”​​ 基特:“负”​​ LEU:“负”​​ NIT:“负”​​ 赞成:“负”​​ 秘书长:“1.01”​​ UBG:“标准”​​ 博士:“6”​​ 测试名称:“10b1”​ ​ 1: {…} ​​ 比尔:“负”​​ 谷氨酸:“50”​​ 血红蛋白:“50”​​ 基特:“负”​​ LEU:“负”​​ NIT:“负”​​ 赞成:“负”​​ 秘书长:“1.01”​​ UBG:“标准”​​ 博士:“6”​​ 测试名称:“10b1.5”​​@jorobash Not sur