ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|---|
|
方法 1: スプレッド構文(推奨)
ES2018 以降で使える、もっとも読みやすい方法。新しいオブジェクトを返すので元のオブジェクトは変更されません。
const a = { name: "Alice", age: 30 };
const b = { age: 31, email: "alice@example.com" };
const merged = { ...a, ...b };
console.log(merged);
// → { name: "Alice", age: 31, email: "alice@example.com" }
// 後の方 (b の age) が優先される
// 3 つ以上
const c = { role: "admin" };
const all = { ...a, ...b, ...c };
// プロパティを追加・上書き
const updated = { ...a, age: 35, status: "active" };
// 元のオブジェクトを保持したまま部分更新(イミュータブル)
const user = { name: "Alice", profile: { age: 30 } };
const newUser = { ...user, name: "Bob" }; // user は変わらない
方法 2: Object.assign()
ES6 (ES2015) から。第 1 引数 (target) を変更するので注意。
const a = { name: "Alice", age: 30 };
const b = { age: 31, email: "alice@example.com" };
const merged = Object.assign(a, b);
console.log(a);
// → { name: "Alice", age: 31, email: "alice@example.com" }
// a が変更される!
// a を変更したくない場合は空オブジェクトを target に
const merged2 = Object.assign({}, a, b);
console.log(a); // → 変わらない
console.log(merged2); // → { name: "Alice", age: 31, email: "..." }
方法 3: lodash の merge / mergeWith(深いマージ)
ネストされたオブジェクトを再帰的にマージしたいとき:
const a = {
name: "Alice",
profile: { age: 30, hobbies: ["read"] }
};
const b = {
profile: { age: 31, location: "Tokyo" }
};
// スプレッドの場合(シャロー)
const shallow = { ...a, ...b };
console.log(shallow.profile);
// → { age: 31, location: "Tokyo" }
// hobbies が消える!b の profile が a の profile を完全に上書き
// lodash の merge
import _ from "lodash";
const deep = _.merge({}, a, b);
console.log(deep.profile);
// → { age: 31, hobbies: ["read"], location: "Tokyo" }
// ネストもマージされる
シャローコピー vs ディープコピー
スプレッド・Object.assign は1 階層だけのコピーです:
const a = { profile: { age: 30 } };
const b = { ...a };
b.profile.age = 99;
console.log(a.profile.age); // → 99
// a.profile と b.profile は同じオブジェクトを参照(シャローコピー)
// ディープコピーの方法
// 1. structuredClone (モダンブラウザ + Node 17+)
const deep = structuredClone(a);
// 2. JSON 経由(関数・Date 等は失われる)
const deep2 = JSON.parse(JSON.stringify(a));
// 3. lodash の cloneDeep
const deep3 = _.cloneDeep(a);
deep.profile.age = 99;
console.log(a.profile.age); // → 30 (変わらない)
条件付きマージ
// 条件で対象を変える
const base = { name: "Alice" };
const extra = condition ? { extra: "value" } : {};
const result = { ...base, ...extra };
// null / undefined はマージしても OK (空オブジェクト相当)
const merged = { ...base, ...null, ...undefined }; // base そのまま
// 条件で property を含める / 除外
const user = {
name: "Alice",
...(isAdmin && { role: "admin" }),
...(email && { email })
};
配列のマージ
オブジェクトとは別:
const a = [1, 2, 3];
const b = [4, 5, 6];
// スプレッド
const merged = [...a, ...b]; // → [1,2,3,4,5,6]
// concat
const merged2 = a.concat(b); // → [1,2,3,4,5,6]
// 重複排除
const unique = [...new Set([...a, ...b])];
// オブジェクトの配列を ID でマージ
const users1 = [{ id: 1, name: "A" }, { id: 2, name: "B" }];
const users2 = [{ id: 2, name: "B2" }, { id: 3, name: "C" }];
const merged3 = [...new Map(
[...users1, ...users2].map(u => [u.id, u])
).values()];
// → [{id:1,name:"A"}, {id:2,name:"B2"}, {id:3,name:"C"}]
注意点
| 方法 | シャロー / ディープ | 元を変更 | 備考 |
|---|---|---|---|
スプレッド {...a, ...b} | シャロー | × | 推奨 |
Object.assign(a, b) | シャロー | ○(a を変更) | 第 1 引数注意 |
Object.assign({}, a, b) | シャロー | × | スプレッドと同等 |
_.merge({}, a, b) | ディープ | × | lodash 依存 |
structuredClone(a) | ディープコピー | × | マージはしない、単純コピー |
JSON.parse(JSON.stringify(a)) | ディープ | × | 関数/Date/undefined 喪失 |
関連記事
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページ
子ページはありません
同階層のページ
同階層のページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Laravel キャッシュクリア完全ガイド(cache:clear / config:clear / 2026-05-18 07:42:07
- プロジェクトの作成と削除 2026-05-18 07:42:07
- インストール直後にNetbeansが反応しない 2026-05-18 07:42:07
- 動画やチャンネルの検索 2026-05-18 07:42:07
- APIキー取得方法 2026-05-18 07:42:07
- チャンネル情報の取得 2026-05-18 07:42:07
- API 入門 — Web API(REST / GraphQL / gRPC / 2026-05-18 07:42:07
- インストール(eclipseプラグイン) 2026-05-18 07:42:07
- Laravel「Dotenv values containing spaces must be surrounded 2026-05-18 07:42:07
- エラー一覧 2026-05-18 07:42:07
- curl: (51) SSL: certificate subject name '~' does not match 2026-05-18 07:42:07
- インストール方法(Windows版) 2026-05-18 07:42:07
- JSONから配列に変換 2026-05-18 07:42:07
- 処理を一定時間待つ 2026-05-18 07:42:07
- A non well formed numeric value encountered 2026-05-18 07:42:07
コメントを削除してもよろしいでしょうか?