jQuery

jQueryでオブジェクト同士を結合させる($.extend)

本記事では、jQueryでオブジェクト同士を結合させることができるextendメソッドの使い方について解説しています。

jQueryの学習におすすめ参考書
jQuery最高の教科書

本書情報
著者株式会社シフトブレイン
発売日2013/11/26
ページ数320ページ
Kindle版
レビュー
(Amazon)
(93件)

参考書が苦手な人はUdemyの動画がおすすめ
即実践 手を動かして6時間でjQueryをマスターしよう。
知識、経験ゼロからjQueryを使いこなそう

動画情報
作成者村守 康
学習時間6時間
受講者数28,547人
レビュー (425件)
動画の詳細はこちら

extendメソッド

extendメソッドは、複数のオブジェクト同士を結合することができるメソッドです。使い方を工夫することで、配列やオブジェクトのコピーをすることもできます。

基本的な使い方は以下のとおりです。

$.extend( deep, target, object, object )
引数
deeptrueを指定すると、深いプロパティもマージ可能
targetマージ先のオブジェクトを指定
objectマージするオブジェクトを指定

まず始めに、deepとtargetを指定せずにobjectだけ指定して結果を見てみましょう。

let personObj1 = {
  id:1,
  name:"John"
}

let personObj2 = {
  age:30
}

let mergeObj = $.extend(personObj1, personObj2);
console.log(mergeObj);
/* マージ結果 */
{
  id:1,
  name:"John",
  age:30
}

一見問題ないように見えますが、実はpersonObj1にもageプロパティがマージされてしまっています。

console.log(personObj1);
/* 実行結果 */
{
  id:1,
  name:"John",
  age:30
}

この理由は、第一引数に指定したオブジェクトに対しても第二引数以降でしたオブジェクトがマージされてしまうからです。これを回避するには、第一引数にtargetの空オブジェクトを追加します。

let mergeObj = $.extend({}, personObj1, personObj2);
console.log(mergeObj);
/* マージ結果 */
{
  id:1,
  name:"John",
  age:30
}

console.log(personObj1);
/* 実行結果 */
{
  id:1,
  name:"John"
}

personObj1のオブジェクトにageプロパティがマージされていないことが確認できました。

最後に引数deepについて解説します。以下のような深い階層にプロパティや値が存在する場合にオブジェクト同士の結合をしたらどうなるでしょうか?

let fruits1 = {
  name:"りんご",
  info: {
    area:"青森",
    season:"秋"
  }
}

let fruits2 = {
  info:{
    price:200
  }
}

let mergeObj = $.extend({}, fruits1, fruits2);
console.log(mergeObj);
/* マージ結果 */
{
  name:"りんご",
  info: {
    price:200
  }
}

fruits1のオブジェクトで設定したinfoプロパティ内の値が上書きされています。このように深い階層のオブジェクトをマージする時には引数deepをtrueに指定します。

let mergeObj = $.extend(true,{}, fruits1, fruits2);
console.log(mergeObj);
/* マージ結果 */
{
  name:"りんご",
  info: {
    area:"青森",
    season:"秋",
    price:200
  }
}

すると、infoが上手く結合していることが確認できました。

jQueryで配列やオブジェクトをコピーする方法本記事では、jQueryで配列やオブジェクトをコピーする方法について解説しています。...

ブログランキング・にほんブログ村へ PVアクセスランキング にほんブログ村