ラボ > Javascript関連:配列、オブジェクト
js 配列・オブジェクトの値渡し(ディープコピー)(JSON.parse(JSON.stringify()))
配列やオブジェクトはそのままコピーだと元も変わる
作成日:2019-07-07, 更新日:2024-02-08
基本
いったんJSONにしてから配列(オブジェクト)に戻すのが良さげ。
var oriHoge = 〇オブジェクトや配列〇; var cpHoge = JSON.parse(JSON.stringify(oriHoge));
参照渡しと値渡し(ディープコピー)
サイトによって表現が異なるが基本、下記っぽい
・「参照渡し」と「シャローコピー」は同じ
・「値渡し」と「ディープコピー」は同じ
※「シャローコピー」はあまり見かけない。
参照渡し
▼配列やオブジェクトをそのまま変数に代入するってヤツ
var aryOri = ['鶏精', '豚精', '丸ごとシマウマ']; var aryCpy = aryOri; aryCpy[0] = '砂肝'; console.log(aryOri[0]); // 「砂肝」が出力 console.log(aryCpy[0]); // 「砂肝」が出力
値渡し
▼配列やオブジェクトにひと手間かけて変数に代入
var aryOri = ['鶏精', '豚精', '丸ごとシマウマ']; var aryCpy = JSON.parse(JSON.stringify(aryOri)); aryCpy[0] = '砂肝'; console.log(aryOri[0]); // 「鶏精」が出力 console.log(aryCpy[0]); // 「砂肝」が出力
メモ
値渡しを調べると・・・色々と方法があるっぽい。
条件・環境に影響があるのか・・・昨日まで出来てたのに、今日エラーとかあるので・・・jsonがラクかな。
▼配列の値渡し1
var cp = Array.from(配列);
▼配列の値渡し2
var cp = 配列.slice(0, 配列.length);
▼配列の値渡し3
var cp = 配列.slice();
▼配列の値渡し4
var cp = 配列.concat();
▼オブジェクトの値渡し
var cp = Object.create(オブジェクト);