性格悪い人が優勝

配列のコピーをしたいのですが、調べるとシャローコピーとか参照渡しなどの言葉が並んでいて良く理解できません。(なぜややこしい?のかはおぼろげながら理解できました)
やりたいことはBという配列にAという配列にコピーしたとき、Aを変更してもBを変更しても互いに影響しないコピー方法です。処理時間やコードの長さは問いません。わかりやすい方法を教えてください。

A 回答 (3件)

No1です



>要素が削除追加されているような場合でも独立性は保証されるのでしょうか?
コピー処理の実行時点での、配列Aをコピーしているだけなので、その作られ方や変更の経緯等は関係ありません。

ただし、No1の回答は、配列の各要素が単純な数値や文字列であると仮定しています。
要素のうちに配列やオブジェクト等が存在する場合には、それに関しては参照渡しになってしまいますので、内容的に独立したものにはなりません。
その場合であっても独立させたいのであれば、上記の例と同様に、その要素(あるいは属性)毎にコピーした新しい要素(またはオブジェクト)としてコピー生成する必要があります。
    • good
    • 0
この回答へのお礼

わかりやすい回答をありがとうございました。

オブジェクトを含む配列はJSON化して元に戻す方法でやってますがエラー処理など何かと面倒?で、せめて単純文字列要素の配列だけでも簡単に行う方法探してました。
concatとかsliceなどを見よう見まねで使ったら期待した結果と異なるため困っていました。

もちろん見方に寄りますが、JavaScriptというのはずいぶん毛色の違う言語?ですね、よくこれでつじつまが合うもんだなと感心している次第です。

お礼日時:2020/07/22 12:17

No2です



>オブジェクトを含む配列はJSON化して元に戻す方法でやってますが~~
あまり考えたことがありませんでしたが、その方法なら、単純配列でも(そうでなくても)そのまま利用可能ですね。

let B = JSON.parse( JSON.stringify(A) );

こちらの方が、要素の内容や構成を気にせずにすむので、便利かも知れません。
    • good
    • 0

こんにちは



普通に順に代入するだけでは?

let B = [];
for(let i=0; A[i]; i++) B[i] = A[i];
    • good
    • 0
この回答へのお礼

ありがとうございました。
新しい配列の要素ごとに元配列の要素を代入すれば元配列とは独立した配列ができあがるのですね。
別な質問気味で申し訳ありませんが、このやり方で元配列がspliceなど、要素が削除追加されているような場合でも独立性は保証されるのでしょうか?

お礼日時:2020/07/22 09:46

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!