0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

JavaScript/スプレッド構文(...obj)とObject.assign()

Last updated at Posted at 2024-12-05

スプレッド構文(...obj)とObject.assign()の用途

スプレッド構文(...obj)とObject.assign()はどちらもオブジェクトのシャローコピーやマージに使用される。

スプレッド構文の使い方

//配列の場合
const fruits = ['apple', 'banana', 'grape'];
const fruits2 = [...fruits, 'peach'];  //...(コピー元の配列名)

console.log(fruits2);  //['apple', 'banana', 'grape', 'peach']
console.log(fruits2.shift());  //apple

//オブジェクトの場合
const person = {
  name: 'Takuto',
  gender: '',
};
const person2 = {...person, age: 20};  //...(コピー元のオブジェクト名)

console.log(person2);  //{name: 'Takuto', gender: '男', age: 20}

Object.assign()の使い方

const target = { a: 1, b: 2 };
const source = { b: 3, c: 4 };

const returnedTarget = Object.assign(target, source);
console.log(returnedTarget);  //{a: 1, b: 3, c: 4}
//targetも更新される
console.log(target);  //{a: 1, b: 3, c: 4}

引数はいくらでも指定できてキーが被っていた場合は後の引数のものが優先される

シャローコピー

シャローコピーとはオブジェクトや配列の1階層目のプロパティだけをコピーする。
ネストされたオブジェクトや配列は参照が共有されるため、元のオブジェクトも影響を受ける。

スプレッド構文を用いた場合

const person = {
  name: 'Takuto',
  gender: '',
  info: {
    age: 20,
    interests: 'reading',
  },
};

const shallowcopy = {...person};  //シャローコピー 

shallowcopy.name = 'Kazuya';
shallowcopy.info.age = 21;

console.log(person.name);  //Takuto  変更されない
console.log(person.info.age);  //21  変更される

Object.assign()を用いた場合

シャローコピーの行を以下に変更

const shallowcopy = Object.assign({}, person);  //シャローコピー

マージ

スプレッド構文を用いた場合

const person = {
  name: 'Takuto',
  gender: '',
  age: 20
};

const person2 = {
  name: 'Takuto',
  gender: '',
  age: 21,
  interests: 'reading',
};

const merged = {...person, ...person2};  //マージ

console.log(merged);  //{name: 'Takuto', gender: '男', age: 21, interests: 'reading'}

Object.assign()を用いた場合

マージの行を以下に変更

const merged = Object.assign({}, person, person2);  //マージ
0
0
0

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?