在JavaScript中同时使用筛选器和排序方法时排序不正确
我知道,通过创建嵌套数组,我可以以更实用的方式对数组进行排序:在JavaScript中同时使用筛选器和排序方法时排序不正确,javascript,arrays,sorting,Javascript,Arrays,Sorting,我知道,通过创建嵌套数组,我可以以更实用的方式对数组进行排序: [ [value,frequency], [value,frequency] ] 按频率排序 然而,我试图使用另一种方法,因为它在我的头脑中是有意义的,但由于某些原因,我无法解释为什么它不能始终如一地工作 一些测试返回了这些令人困惑的结果: 函数arrOrd(arr){ var arr_s=arr.sort( 功能(a、b){ var u=arr.filter(x=>x==a).length;
[ [value,frequency], [value,frequency] ]
按频率排序
然而,我试图使用另一种方法,因为它在我的头脑中是有意义的,但由于某些原因,我无法解释为什么它不能始终如一地工作
一些测试返回了这些令人困惑的结果:
函数arrOrd(arr){
var arr_s=arr.sort(
功能(a、b){
var u=arr.filter(x=>x==a).length;
var v=arr.filter(x=>x==b).length;
返回u-v;
})
返回arr_s;
}
log(arrOrd([2,3,5,3,7,9,5,3,7]).toString());//=>[9,2,7,7,5,5,3,3,3]
log(arrOrd([4,4,2,5,1,1,3,3,2,8]).toString());//=>[8,5,4,4,2,1,1,3,3,2]
log(arrOrd([4,9,5,0,7,3,8,4,9,0]).toString());//=>[8,3,7,5,4,9,0,4,9,0]
排序过程中数组的状态由实现定义。Per:
- 对[[Get]]、[[Set]]、HasOwnProperty或DeletePropertyTorThrow的每次调用的属性键参数都是字符串表示形式 指小于len的非负整数
- 调用SortCompare的参数是以前调用[[Get]]内部方法时返回的值,除非属性 根据,以前那些调用访问的不存在 他有自己的财产。如果SortCompare的两个透视[sic]参数 对应于不存在的属性,请使用+0而不是调用 SortCompare。如果只有第一个透视参数不存在 使用+1。如果只有第二个透视参数不存在,则使用 -一,
- 如果obj不是稀疏的,则不能调用DeletePropertyOrThrow
- 如果任何[[Set]]调用返回false,将引发TypeError异常
- 如果从这些操作中的任何一个返回突然完成,它将立即作为此函数的值返回
“hi”
,对副本执行排序,然后将所有元素替换回来
如果您对每次比较期间阵列的确切状态感到好奇,请记录下来
const arr=[5,2,3,1,4];
arr.sort((a,b)=>{
控制台日志(arr.join(“”));
返回a-b;
});代码>