0

配列に対して操作を実行し、配列の別のコピーを返し、元の配列を変更しない関数を作成しようとしています。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]
4

2 に答える 2

1

新しいarray2array2=arrayへの参照を作成するだけなので、代わりにこの行を追加します。array

 var array2 =array.slice(0); //it will create a new array not the reference.

フィドルhttp://jsfiddle.net/N64w3/

于 2013-02-12T07:21:26.653 に答える
1

var array2 = array.slice(0)または単にarray.slice()配列を複製します

ここにあなたはそれを参照しています

于 2013-02-12T07:19:27.217 に答える