0

これの何が問題なのかしら

$(function() {
var arr1=new Array('A','B','C','D','E','F','G');
var arr2=new Array('F','D','B');
var arr3=arr1;
    for(x=0; x<arr3.length; x++) {
        if(jQuery.inArray(arr3[x],arr2) == -1) {arr3.splice(x, 1);}

    }
    alert(arr1.join(','));
    alert(arr3.join(','));
});

arr1 は Array('A','B','C','D','E','F','G') のままでよいと思っていましたが、この操作の後、arr1 は arr3 になります。操作全体がarr1にまったく触れないので、私には意味がありません。

これを投稿した後、答えが見つかりました。配列の複製 javascript スプライシングを参照してください。

4

3 に答える 3

0

同様の割り当てvar arr3=arr1;は参照によって行われます。つまり、arr3変数は、arr1変数が指すのと同じ場所を指すようになりました。下線が引かれたデータ(この場合は配列)は同じです。基本的に、arr1とarr3は同じです。したがって、一方を介して行われた変更は、もう一方を介して表示されます。単純型の配列を複製する場合は、slice(0)

var arr3 = arr1.slice(0);
于 2011-10-30T03:39:44.920 に答える
0
var x = [3, 4, 5]
var y = [3, 4, 5]
var z = y

x === y // false
y === z // true (y and z reference the same object)

y.push(6)
y // [3, 4, 5, 6]
z // [3, 4, 5, 6]

var x2 = x.slice(0)
x2 === x // false
x2.push('foo')
x2 // [3, 4, 5, 'foo']
x // [3, 4, 5]

配列Array.prototype.sliceコピーするために使用します。

于 2011-10-30T03:49:20.703 に答える
0

arr1配列オブジェクトです。arr1のよう にコピーvar arr3 = arr1すると、元のオブジェクトへの新しい参照が取得されます。ですから、 を変更するarr3と、arr1また変更されます。

「オブジェクトを複製する方法」を検索する必要があります。これが役立つ場合があります。

于 2011-10-30T06:23:21.890 に答える