Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.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 - Fatal编程技术网

如何根据新值对已排序二维数组的特定部分进行排序。但前提是第一个排序的值在Javascript中匹配

如何根据新值对已排序二维数组的特定部分进行排序。但前提是第一个排序的值在Javascript中匹配,javascript,arrays,Javascript,Arrays,我有以下问题: 我有一个包含对象的数组。 每个对象都有分数和等级,如下所示: [ { "score": 20, "rank": 12 }, { "score": 20, "rank": 7 }, { "score": 34, "rank": 4 } ] 首先,我按分数降序排序,并将其存储到二维数组中 [34, 4] [20, 12] [20, 7] 但是现在,如果同一个分数出现两次或两次以上,我希望这些

我有以下问题: 我有一个包含对象的数组。 每个对象都有分数和等级,如下所示:

    [
        { "score": 20, "rank": 12 }, 
        { "score": 20, "rank": 7 },
        { "score": 34, "rank": 4 }
    ]
首先,我按分数降序排序,并将其存储到二维数组中

    [34, 4]
    [20, 12]
    [20, 7]
但是现在,如果同一个分数出现两次或两次以上,我希望这些分数按排名排序。因此,任何具有最低等级的都将具有较小的索引号。导致:

    [34, 4]
    [20, 7]
    [20, 12]

我真的不知道如何做到这一点,我做了一些方法,但它们是一种不好的方式来提及它们。

您可以检查两个对象的
分数
之差是否为
0
,然后返回
等级
之差,否则返回
分数

const arr=[
{“分数”:20,“排名”:12},
{“分数”:20,“排名”:7},
{“分数”:34,“排名”:4}
]
设res=[…arr]
.sort((a,b)=>(b.score-a.score)| |(a.rank-b.rank))
.map(x=>[x.score,x.rank]);

console.log(res)
只需使用lodash和orderby 2个字段。

您可以先对数组进行
排序,然后对
对象进行
映射。值

const arr=[
{“分数”:20,“排名”:12},
{“分数”:20,“排名”:7},
{“分数”:34,“排名”:4}
]
让result=arr.sort((a,b)=>(b.score-a.score)| |(a.rank-b.rank))
.map(x=>Object.values(x))

console.log(result)
很高兴看到您如何进行第一次排序:我按分数降序排序,并存储到二维数组中。。看看我们是否可以改进排序逻辑以接近您的最终目标。
drivers.sort(sort2dArrDes)
函数sort2dArrAsc(a,b){if(a[0]==b[0]){return 0;}否则{return(a[0]
谢谢你的回答,但排序不正确。输出是:`[[34,4],[20,12],[20,7]`但预期是:`[[34,4],[20,7],[20,12]]`