javascript - 为什么在这种情况下排序会修改原始内容?

标签 javascript sorting

我遇到了一个问题,即更改原始数组,奇怪的是添加 arr.join("...").split("...") 似乎防止这种情况发生:

一些背景:

  • 我的脚本创建并向数组添加内容
  • 此数组初始化为空,如 arr=[]
  • 通过 arr[index] = "..."添加内容
  • 那么我想要一份已排序的 arr 副本
  • 当我进行排序时,原始arr被修改

这是正在发生的事情的简化版本:

var arr=[], sorted;

arr[0] = "hello";
arr[1] = "world";

//buggy, the original is sorted
//sorted = arr.sort(function(a,b){return (a.length-b.length);});

sorted = arr.join("improbableCollision").split("improbableCollision").sort(function(a,b){return (a.length-b.length);});
  • 为什么添加 .join("*").split("*") 可以解决问题?
  • 是什么导致了这个问题?
  • 有更优雅的方法来解决这个问题吗?

要获取完整脚本,请查看 jsFiddle

最佳答案

要在不进行所有连接和拆分的情况下进行排序,请使用切片或连接复制数组:

var 排序 = arr.slice(0).sort()

关于javascript - 为什么在这种情况下排序会修改原始内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9952598/

相关文章:

javascript - onclick 函数未执行以更改图像

javascript - 动态更改 bootstrap-inputmask.js 上的掩码

python - 具有自定义比较谓词的 heapq

python - 使用关键字列表中的主键和字母顺序作为辅助键对字典列表进行排序

javascript - 将按钮插入 DataTables 单元格无法正常工作

javascript - 谷歌图表可视化实例化问题仪表板

javascript - 如何使用 Javascript 对表格行进行排序

ios - 在 table 上显示离用户最近的位置列表

image - 使用 JavaScript 编写图像元数据

linux - 在 Linux 中按注释对文件进行排序