javascript数组排序
Posted
技术标签:
【中文标题】javascript数组排序【英文标题】:javascript array sorting 【发布时间】:2010-12-02 19:50:36 【问题描述】:barValues 是我传递给函数的数组。在函数中我有这个:
alert(barValues);
var sortedBarValues = barValues;
sortedBarValues.sort(function(a,b)return b - a);
alert(barValues);
我试图以两个数组结束。 barValues 是原始数组,而 sortedBarValues 是该数组的副本,现在已排序。
但是,通过这两个警报,我发现 barValues 也正在排序。这是为什么?复制数组以便将其与原始数组分开排序的正确方法是什么?
【问题讨论】:
【参考方案1】:使用var sortedBarValues = barValues;
语句,您不会复制数组。你只是做一个参考。两个名字都指向同一个数组。
您可以使用var sortedBarValues = barValues.slice();
复制它。 slice 方法用于对数组进行切片,但如果您不向其传递任何参数,它会进行复制。
请记住,使用 slice 方法不能在多维数组上正常工作。复制多维数组有些棘手,但jQuery的extend函数可以为您完成。
您可以在this post 中查看有关如何复制数组的信息。
【讨论】:
谢谢,迈克。很好的解释。【参考方案2】:当您将barValues
分配给sortedBarValues
时,您实际上为原始Array
分配了一个引用。当您对 sortedBarValues
进行排序时,barValues
也会被排序,因为它们实际上是完全相同的。
您需要在对数组进行排序之前对其进行复制,这样另一个不受影响。
var sortedBarValues = Array.apply(, barValues);
sortedBarValues.sort(function(a, b) return b - a; );
【讨论】:
谢谢,亚历克斯。我要去查找有关 javascript 参考的更多信息!【参考方案3】:<html>
<body>
<h2>JavaScript Array Sort</h2>
<p>The lowest number is <span id="demo"></span>.</p>
<script>
var points = [78, 78,99, 2, 5, 25, 10];
document.getElementById("demo").innerHTML = myArrayMin(points);
function myArrayMin(arr)
var len = arr.length
var min = Infinity;
while (len--)
if (arr[len] < min)
min = arr[len];
return min;
</script>
</body>
</html>
输出为 2
【讨论】:
以上是关于javascript数组排序的主要内容,如果未能解决你的问题,请参考以下文章