0

私は簡単なコードを持っています

sites_from_session = 12;
function function_name () {
    var items_to_send = sites_from_session;
    var template_name = jQuery('#new-site-template-name').val();
    console.log(sites_from_session);
    items_to_send.push(template_name);
    console.log(sites_from_session);
}


function_name();
function_name();
function_name();
function_name();
function_name();
function_name();//...

問題は、pushメソッドが値を両方の配列にプッシュすることです

ここに画像の説明を入力

どこが間違っていますか?

4

2 に答える 2

1

JavaScript では、配列は自己複製しません。みたいなことを言うと

arr1 = arr2;

両方arr2が有効な配列である場合、 の実際のコピーは作成されていませんarr2。あなたがやったのは、それへの参照ポインタを作成することだけですarr1。したがって、次のような変更を行うと

arr1[0] = "some value";

あなたは(本質的に)と同じことを言っています

arr2[0] = "some value";

別のコピーを適切に複製するには、これを使用する必要があります。

var items_to_send = sites_from_session.slice();

これにより、元の配列のすべての項目を保持する新しい配列が返されます。

于 2012-11-26T12:56:05.003 に答える
0

これは非常に一般的な Javascript の問題です。配列は次のようにコピーされません。

var items_to_send = sites_from_session;

配列の参照を新しい変数にコピーするだけです。つまり、items_to_sendsites_from_sessionは、RAM 内の同じ配列を指す 2 つの名前です。別のポインター (浅いコピー) ではなく、配列のコピー (深いコピーと呼ばれる) を作成する場合は、次を使用する必要がありますslice()

//create a copy of the array
var items_to_send = sites_from_session.slice(0);

コードの残りの部分は正常に動作するはずです。

この質問の重複の可能性: How do you clone an Array of Objects in Javascript?

ここで詳細を学ぶことができます: http://davidwalsh.name/javascript-clone-array

于 2012-11-26T12:59:09.243 に答える