我遇到了一个问题,即更改原始数组,奇怪的是添加 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/