是否可以在排序方法的代码块 (arr.sort) 中执行其他操作?



我想在数组上使用arr.sort方法按升序对其进行排序,并且在排序时,splice重复项+原始项,例如newArr.splice(newArr.indexOf(a),2)when a==b.不过什么也没发生。当我将splice更改为基本的c+=1操作时,也没有任何反应。您是否无法在.sort方法中执行此类操作?为什么呢?我本以为它们是与排序方法一起运行的单独命令(即每次运行 arr.sort 条件时 c 增加 1 与 arr.sort 输出是分开的(。

//Sort array in ascending order: newArr.sort((a,b) =>a===b?0:b>a?-1 :1)
//trying to apply other operations within the codeblock via c
var c = 0
newArr.sort(function(a,b){      
if(a===b){
c+=1
//c doesn't increase at all tho
return 0
} else if(b>a){
return -1
} else{
return 1
}
})

最好先uniq然后sort数组。一般来说,splice是一项昂贵的操作;我会找到解决方法。

const uniq = arr => Array.from(new Set(arr))
const sort = arr => arr.sort()
sort(uniq([5, 5, 1, 4, 3, 3, 2, 5])) // => [1, 2, 3, 4, 5]

你不想弄乱范围之外的东西,特别是对于你可以线性表达的东西。sort您可能不必优化。

最新更新