【发布时间】:2012-03-24 11:09:42
【问题描述】:
假设我想要一个返回输入数组的排序副本的排序函数。我天真地尝试过这个
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);
}
但它根本不起作用。
有没有一种直接的方法来解决这个问题,最好是一种不需要手动滚动我自己的排序算法或将数组的每个元素复制到一个新元素中的方法?
【问题讨论】:
-
创建数组的深层副本并对其进行排序。
-
@evanmcdonnal 如果只需要重新排序而不是数组中每个项目的副本,那么浅拷贝可能就足够了。
-
.sort需要this值作为数组,因此要使最后一个 sn-p 工作,您将执行.sort.call(arr)(尽管它不能解决您的问题)。跨度> -
@Kekoa 是的,这是一个很好的观点。如果您只更改元素的顺序而不更改元素本身,则无需消耗更多内存。
-
zzzzBov 的方法非常有效! stackoverflow.com/a/9592774/7011860
标签: javascript arrays sorting