55
36

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

連想配列などのオブジェクトの値をマージするにはObject.assign()を利用する

Last updated at Posted at 2016-08-07

はじめてのqiitaです。

2つのjsonオブジェクト連想配列をマージしようとすると、実は今までいい方法はあまりありませんでした。


var json1 = {"dog":"poti", "cat":"tama"};
var json2 = {"fish":"sashimi", "bird":"karaage"};
// この2つから {"dog":"poti", "cat":"tama", "fish":"sashimi", "bird":"karaage"} を作成したい

for in構文を用いれば一応やりたいことは出来るんですが、for in構文はすでに非推奨となっており、コード規約によってはlintで弾かれる場合があります。(弊社がそう)

var json3 = {};
for(key in json1){
  json3[key] = json1[key];
}
for(key in json2){
  json3[key] = json2[key];
}
console.log(json3);

また、あまり見た目のいいもんでもないです。スマートに結合したい。

そんなとき、Object.assign()が使えます。

###Object.assign()

MDNを見てみましょう。

一つ以上の ソース オブジェクトから、直接所有で (own) 列挙可能な (enumerable) すべてのプロパティの値を、ターゲット オブジェクトへコピーします。戻り値はターゲット オブジェクトです。

らしいです。使い方はこう。

var json3 = Object.assign(json1, json2);

第一引数のオブジェクトに、第二引数以降のオブジェクトのプロパティを追加していく方法で結合しているらしいです。
この場合戻り値として帰ってくるものは、第一引数に与えられたオブジェクトの参照となります。
つまり、json1に値が追加されていく破壊的関数であります。

Object.assign(json1, json2);
console.log(json1); // {"dog":"poti", "cat":"tama", "fish":"sashimi", "bird":"karaage"}

挙動に注意しながら、便利に使いましょう。

55
36
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
55
36

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?