Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
35
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

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

はじめての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"}

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
35
Help us understand the problem. What are the problem?