javascriptで配列を保持する方法は?
-
06-07-2019 - |
質問
ここに、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>
オリジナルを保持してコピーを変更する方法はありますか?
解決
アレイのコピーを作成したことはありません。配列を別の変数に割り当てるだけです。これはJavascriptでコピーしません。この例では、アクセスできる2つの変数を持つ1つの配列のみがあります。 Javascriptで配列をコピーする組み込みの方法はないため、独自の関数を作成する必要があります。
実際に実装する方法のヒントについては、このStackOverflowの質問をご覧ください配列内の要素のコピー。
他のヒント
組み込みの配列関数の一部は、実際にコピーを作成します。その1つがスライスです。
例:
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
あなたがしているのは、配列のコピーを作成することではなく、配列への参照のコピーを作成するだけなので、同じ配列オブジェクトへの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を使用してオブジェクトを複製する方法です。
配列のコピーを返すネイティブの 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 = [];
配列をコピーするには:
var np=op.slice();
または
var np=op.concat();
concatは高速ですが、sliceは1文字少なくなります。一部の人々は「スライス」をエイリアスします;または&quot; concat&quot; 「コピー」としてコピーを作成していることがより明確になります。
どちらの場合もパラメーターは不要です。スライスのパラメーターは、コードを大きく、遅くするだけです。