これは、2 つの配列 (np と op) を持つコードで、一方は他方のコピーです。
ただし、コピーを変更すると、元も変更されます。見てください:
<script type="text/javascript">
var op=new Array(0, 0);
var np=op;
np[1]=2;
document.write(op+"<br>")
document.write(np)
</script>
オリジナルを保持し、コピーを変更する方法はありますか?
これは、2 つの配列 (np と op) を持つコードで、一方は他方のコピーです。
ただし、コピーを変更すると、元も変更されます。見てください:
<script type="text/javascript">
var op=new Array(0, 0);
var np=op;
np[1]=2;
document.write(op+"<br>")
document.write(np)
</script>
オリジナルを保持し、コピーを変更する方法はありますか?
組み込みの配列関数の中には、実際にコピーを作成するものがあります。その一つがスライスです。
例えば:
var op=new Array(0, 0);
var np= op.slice(0);
np[1]=2;
document.write(op+"<br>")
document.write(np)
配列のコピーを作成したことはありません。配列を別の変数に割り当てただけです。これは Javascript ではコピーされません。あなたの例では、アクセスできる2つの変数を持つ配列は1つだけです。Javascript には配列をコピーする組み込みの方法がないため、それを行うには独自の関数を作成する必要があります。
配列内の要素のコピーを実際に実装する方法に関するヒントについては、この StackOverflow の質問をご覧ください。
あなたがしているのは、配列のコピーを作成することではなく、配列への参照のコピーを作成するだけなので、同じ配列オブジェクトへの 2 つの参照を取得します。
これは、配列の実際のコピーを作成する方法です。
var np = op.concat();
このconcat
メソッドは、追加の項目が追加された配列のコピーである新しい配列を作成します。追加の項目を指定しない場合は、配列のコピーを取得するだけです。
Array.prototype.copy = function() {
return this.slice(0, this.length);
}
それで
var op=new Array(0, 0);
var np=op.copy();
np[1]=2;
document.write(op+"<br>")
document.write(np)
2 番目のアレイをコピーするのではなく、複製する必要があります。
- - アップデート
オブジェクトを変数に代入すると、参照のみがコピーされます (つまり、両方が同じデータを指します)。このオブジェクトの独立したコピーを作成するには、クローンを作成する必要があります。これにはいくつかの方法があります。たとえば、ここでは jQuery を使用してオブジェクトを複製する方法を示します。
配列をコピーするには:
var np=op.slice();
また
var np=op.concat();
concat は高速ですが、slice は 1 文字少なくなります。コピーを作成していることをより明確にするために、「スライス」または「連結」を「コピー」と別名で呼ぶ人もいます。
どちらの場合もパラメータは必要ありません。スライス内のパラメーターは、コードを大きくして遅くするだけです。
slice
配列のコピーを返すネイティブ メソッドを使用できます。
var np = op.slice(0,op.length);
2 番目のパラメーターはオプションである必要がありますが、IE では必須だと思います。
変更を加えたコード:
var op=new Array(0, 0);
var np=op.slice(0,op.length);
np[1]=2;
document.write(op+"<br>")
document.write(np)
新しいアレイを作成するには、次のことを検討してください。
var op = [];