我試圖寫一個陣列上執行操作並返回數組的不同副本,離開原來的不變的功能。我想我可以通過聲明var array2 = array
然後繼續進行數組操作來做到這一點。我究竟做錯了什麼?試圖離開輸入參數不變
這裏是我的示例函數:
var partition = function(array, p){
var pivot = array[p];
var length = array.length;
// make a copy and move pivot to the front
var array2 = array;
array2[p] = array2[0];
array2[0] = pivot;
// partition the array
var i = 1;
for (var j = 1; j < length; j++){
//console.log('i='+i+', j='+j)
if (array2[j] < pivot) {
var temp = array2[j];
array2[j] = array2[i];
array2[i] = temp;
i++;
}
}
//console.log('array after partitioning: ' + array)
// swap pivot
array2[0] = array2[i-1];
array2[i-1] = pivot;
var answer = {array: array2, p: i-1}
return answer;
};
而且我調用示例:
var a = [3, 2, 1];
partition(a, 0);
console.log(a); // prints [1,2,3] but I want [3,2,1]
陣列和在JavaScript對象通過引用傳遞,而不是值。如果您不希望維護該引用,則需要您執行克隆。 – Nucleon 2013-02-12 07:21:49