假设我想要一个排序函数,该函数返回输入数组的排序副本。我天真地尝试过
function sort(arr) {
return arr.sort();
}
我对此进行了测试,这表明我的sort方法正在使数组变异。
var a = [2,3,7,5,3,7,1,3,4];
sort(a);
alert(a); //alerts "1,2,3,3,3,4,5,7,7"
我也尝试过这种方法
function sort(arr) {
return Array.prototype.sort(arr);
}
但它根本不起作用。
有没有解决这个问题的简单方法,最好是不需要手动滚动我自己的排序算法或将数组的每个元素复制到一个新元素中的方法?
1
创建数组的深层副本并对其进行排序。
—
evanmcdonnal 2012年
@evanmcdonnal如果只需要重新排序而不是数组中每个项目的重复,则浅表副本可能就足够了。
—
Kekoa 2012年
.sort要求this值是数组,因此对于最后一个代码片段,您可以做.sort.call(arr)(尽管它不能解决您的问题)。
@Kekoa是的,这很不错。如果仅要更改元素的顺序而不是元素本身,则不需要消耗更多的内存。
—
evanmcdonnal 2012年
zzzzBov的方法就像是魅力一样!stackoverflow.com/a/9592774/7011860
—
Samet M.19年