本記事では、jQueryでオブジェクト同士を結合させることができるextendメソッドの使い方について解説しています。
ITエンジニア特化の転職サイト!
自社内開発求人に強い【クラウドリンク】
jQueryの学習におすすめ参考書
jQuery最高の教科書
extendメソッド
extendメソッドは、複数のオブジェクト同士を結合することができるメソッドです。使い方を工夫することで、配列やオブジェクトのコピーをすることもできます。
基本的な使い方は以下のとおりです。
$.extend( deep, target, object, object )
deep | trueを指定すると、深いプロパティもマージ可能 |
---|---|
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で配列やオブジェクトをコピーする方法について解説しています。...