[過去ログ] JavaScript の質問用スレッド vol.125 (1002レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
588(1): デフォルトの名無しさん (ワッチョイ cfcf-7DGa [153.174.224.39]) [sage] 2023/01/15(日) 15:12:37.19 ID:XTiaoq8f0(1/2) AAS
>>587587(3): デフォルトの名無しさん (ワッチョイ 3f3d-/16g [133.32.132.49 [上級国民]]) [sage] 2023/01/15(日) 15:02:28.33 ID:yvxMece60(1/2) AAS
よろしくお願いします
【環境】Win11,Chrome
【何をしたのか】下記コードをHTMLファイルにしてchromeで読み込ませて、コンソールで見た
JSONのItemsを一個追加して、追加したageだけ書き換えたいが、両方書き換わる
【エラーメッセージ】エラーメッセージはない
【期待する結果】Itemsの2個めのageだけが40になるはず
【サンプルコード】現象を再現可能な最小限のコードを書いてください。
<script>
json =
{
"color_list": [ "red", "green", "blue" ],
"Items": [
{ "name": "Tanaka", "age": 26 },
]
}
data0=json["Items"][0]
json["Items"].push(data0)
console.log("before");
console.log(json["Items"][0]["age"]);
console.log(json["Items"][1]["age"]);
json["Items"][1]["age"]=40
console.log("after");
console.log(json["Items"][0]["age"]);
console.log(json["Items"][1]["age"]);
</script>
結果
before
26
26
after
40
40
そのコードで、参照がコピーされているので
data0={...json["Items"][0]}
とすればいい
591: デフォルトの名無しさん (ワッチョイ cfcf-7DGa [153.174.224.39]) [sage] 2023/01/15(日) 15:31:02.14 ID:XTiaoq8f0(2/2) AAS
この場合はこれで十分ですが
スプレッド構文はシャローコピーなので、
データがより複雑な構造の場合は、それなりの記述が必要です
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.055s