为何无法对同一数组进行多次排序得到不同结果?
问题原因与解决方案:多次排序后数组结果一致
问题根源
JavaScript的Array.sort()方法是原地排序——它会直接修改调用它的原数组,而非返回新数组。你的代码中,at_b和at_b2都是对同一个cp1数组的引用:
- 第一次排序修改了
cp1,at_b指向修改后的cp1 - 第二次排序再次修改同一个
cp1,at_b2也指向这个被二次修改后的数组
最终两个变量自然指向完全相同的结果。
解决方案
每次排序前,先创建原数组的独立副本,再对副本执行排序操作。常用的数组复制方式有三种:
- 展开语法:
[...arr] slice()方法:arr.slice()Array.from():Array.from(arr)
修改你的排序代码如下:
// 基于cp1的副本排序,避免干扰原数组和其他排序结果 this.at_b = [...this.cp1].sort((a: any, b: any) => Number(a.stats[0].day_off) - Number(b.stats[0].day_off)).reverse(); this.at_b2 = [...this.cp1].sort((a: any, b: any) => Number(a.stats[0].places_went) - Number(b.stats[0].places_went)).reverse();
这样at_b和at_b2会分别指向两个独立的数组,各自保留对应的排序结果,不会再出现结果一致的问题。
内容的提问来源于stack exchange,提问作者almostasnecessary
相关产品推荐
相关产品推荐

