1

これは、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>

オリジナルを保持し、コピーを変更する方法はありますか?

4

8 に答える 8

7

組み込みの配列関数の中には、実際にコピーを作成するものがあります。その一つがスライスです。

例えば:

var op=new Array(0, 0);
var np= op.slice(0);
np[1]=2;
document.write(op+"<br>")
document.write(np)

参照http://my.opera.com/GreyWyvern/blog/show.dml/1725165

于 2009-11-28T17:03:58.500 に答える
5

配列のコピーを作成したことはありません。配列を別の変数に割り当てただけです。これは Javascript ではコピーされません。あなたの例では、アクセスできる2つの変数を持つ配列は1つだけです。Javascript には配列をコピーする組み込みの方法がないため、それを行うには独自の関数を作成する必要があります。

配列内の要素のコピーを実際に実装する方法に関するヒントについては、この StackOverflow の質問をご覧ください。

于 2009-11-28T17:02:50.657 に答える
4

あなたがしているのは、配列のコピーを作成することではなく、配列への参照のコピーを作成するだけなので、同じ配列オブジェクトへの 2 つの参照を取得します。

これは、配列の実際のコピーを作成する方法です。

var np = op.concat();

このconcatメソッドは、追加の項目が追加された配列のコピーである新しい配列を作成します。追加の項目を指定しない場合は、配列のコピーを取得するだけです。

于 2009-11-28T17:05:12.040 に答える
2
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)

于 2009-11-28T17:05:01.103 に答える
1

2 番目のアレイをコピーするのではなく、複製する必要があります。

- - アップデート

オブジェクトを変数に代入すると、参照のみがコピーされます (つまり、両方が同じデータを指します)。このオブジェクトの独立したコピーを作成するには、クローンを作成する必要があります。これにはいくつかの方法があります。たとえば、ここでは jQuery を使用してオブジェクトを複製する方法を示します。

于 2009-11-28T17:04:09.187 に答える
0

配列をコピーするには:

var np=op.slice();

また

var np=op.concat();

concat は高速ですが、slice は 1 文字少なくなります。コピーを作成していることをより明確にするために、「スライス」または「連結」を「コピー」と別名で呼ぶ人もいます。

どちらの場合もパラメータは必要ありません。スライス内のパラメーターは、コードを大きくして遅くするだけです。

于 2009-11-28T17:06:19.760 に答える
0

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)
于 2009-11-28T17:06:23.240 に答える
0

新しいアレイを作成するには、次のことを検討してください。

   var op = [];
于 2009-11-28T17:07:48.460 に答える