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