jQuery extendでオブジェクトをマージする

jQueryのextendメソッドでオブジェクトをマージするサンプルです。

目次

サンプル オブジェクトをマージする(extend)
  同じキー項目の値は上書きされる
  同じキー項目の値の上書きを避ける
  再帰的にコピーする

オブジェクトをマージする(extend)

jQuery.extend( [deep ], target, object1 [, objectN ] )
  • 引数のオブジェクトをマージします。オブジェクトは2つ以上でも可能です。
  • 以下は、jQueryのextendメソッドのリンクです。
    https://api.jquery.com/jquery.extend/

extendメソッドでマージするサンプルです。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script>
	const color1 = {
		id: 1,
		name: '赤'
	};
	
	const color2 = {
		romaji: 'red'
	};
	
	$.extend(color1, color2);
	
	console.log(color1);//{id: 1, name: "赤", romaji: "red"}
	console.log(color2);//{romaji: "red"}
</script>

3~6行目は、1つめのオブジェクトです。
8~10行目は、2つめのオブジェクトです。
12行目は、メソッドで2つのオブジェクトをマージしています。
14行目は、1つめのオブジェクトです。値が追加されています。
15行目は、2つめのオブジェクトです。値は変わりません。

同じキー項目の値は上書きされる

同じキー項目の場合のサンプルです。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script>
	const color1 = {
		id: 1,
		name: '赤'
	};
	
	const color2 = {
		id: 2,
		romaji: 'red'
	};
	
	$.extend(color1, color2);
	
	console.log(color1);//{id: 2, name: "赤", romaji: "red"}
	console.log(color2);//{id: 2, romaji: "red"}
</script>

7,12行目のキー項目は同じidです。
その場合、後から追加した値で上書きされます。

同じキー項目の値の上書きを避ける

同じキー項目の値の上書きを避けるサンプルです。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script>
	const color1 = {
		id: 1,
		name: '赤'
	};
	
	const color2 = {
		id: 2,
		romaji: 'red'
	};

	$color3 = $.extend({},color1,color2);
	console.log($color3);//{id: 2, name: "赤", romaji: "red"}
	console.log(color1);//{id: 1, name: "赤"}
	console.log(color2);//{id: 2, romaji: "red"}
</script>

13行目は、空のオブジェクト、1つめのオブジェクト、2つめのオブジェクトをマージして新しい変数に代入しています。
引数の2つめ以降のオブジェクトは上書きされません。

再帰的にコピーする

再帰的にコピーするサンプルです。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script>
	const color1 = {
		id: 1,
		name: {
			name1: "赤",
			romaji1: "red"
		},

	};
	
	const color2 = {
		name: {
			romaji1: "red"
		},
	};

	$.extend(true,color1,color2);
	console.log(color1);
	//trueあり {id: 1, name: {name1: "赤", romaji1: "red"}}
	//trueなし {id: 1, name: {romaji1: "red"}}
</script>

1つ目の引数にtrueを指定すると再帰的にコピーします。(ディープコピー)
20行目は、trueありの場合です。
21行目は、trueなしの場合です。

関連の記事

jQuery eachメソッドで繰り返し処理を行う

△上に戻る