2009-09-30 58 views
1

barValues是我傳遞給函數的數組。在我有這個功能:javascript數組排序

alert(barValues); 

var sortedBarValues = barValues; 
sortedBarValues.sort(function(a,b){return b - a}); 

alert(barValues); 

我想結束了兩個數組。 barValues是原始數組,sortedBarValues是該數組的副本,現在已排序。

但是,通過兩個警報,我發現barValues也被排序。這是爲什麼?將數組的副本與原始數組分開排序的正確方法是什麼?

回答

6

隨着聲明var sortedBarValues = barValues;,您沒有製作數組的副本。你只是在做一個參考。這兩個名稱都指向相同的數組。

您可以用var sortedBarValues = barValues.slice();複製它。切片方法是用於切片數組,但如果您不傳遞任何參數,它將進行復制。

請記住,使用slice方法將無法在多維數組上正常工作。複製多維數組有點棘手,但jQuery的擴展函數可以爲你做。

您可以在this post中看到有關如何複製數組的信息。

+1

謝謝,麥克。很好的解釋。 – 2009-09-30 22:39:37

1

當你分配給barValuessortedBarValues實際分配到原Array一個參考。當您對sortedBarValues進行排序時,barValues也會被排序,因爲它們實際上是完全相同的東西。

您需要在對數組進行排序之前製作數組的副本,以使其他數據不受影響。

var sortedBarValues = Array.apply({}, barValues); 
sortedBarValues.sort(function(a, b) { return b - a; }); 
+0

謝謝,亞歷克斯。我要查看更多有關JavaScript參考的信息! – 2009-09-30 22:40:11

0
<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個