Basic CS HA [Destructing]



objオブジェクトとchangeObject関数。changeObject関数を呼び出すと、objオブジェクトのすべてのプロパティは「company」のままになります。title""のみがSamsungに変更された新しいオブジェクトを返す必要があります。この場合、構造分解配分を使用する必要があります。


マイコード:
const obj = {
  name: '홍길동',
  company: {
    name: 'Unemployed',
    skill: ['Communication', 'Hard work'],
    role: {
      name: 'HR'
    }
  },
  age: 22
}


const changeObj = () => {
  return {
    ...obj,
    company: {
      ...obj.company,
      name: 'Samsung',
    }
  }  
}

難しい理由は?


この問題を解いたとき、最初にブログで整理した非構造的な割り当て部分を再検索しました.しかし、問題ははっきり読めなかったので、changeobj関数が返すデータ型はオブジェクトなので、直接答えを書けばいいので、別のオブジェクトを作成して返すべきではないかと思います.
const obj = {
  name: '홍길동',
  company: {
    name: 'Unemployed',
    skill: ['Communication', 'Hard work'],
    role: {
      name: 'HR'
    }
  },
  age: 22
}


const changeObj = () => {
  return {
    const newObj = {
  	  ...obj,
      company: {
        ...obj.company,
        name: 'Samsung',
      }
    }
  }  
}
このようにして返されるオブジェクトに別のオブジェクトが作成され、解放されることはできません.この問題の鍵は、オブジェクトに存在するキー値を持つオブジェクトをコピーするときに、同じ展開構文を使用する必要があることです.このようにオブジェクトをコピーしない場合、新しく作成したオブジェクトのreference typeデータを変更するたびに、元のオブジェクトのreferencetypeデータも変更されます.
let obj = {
  name: '홍길동',
  company: {
    name: 'Unemployed',
    skill: ['Communication', 'Hard work'],
    role: {
      name: 'HR'
    }
  },
  age: 22
}

let newObj = {...obj};
newObj.company.name = 'Samsung';
newObj.company // {name: "Samsung", skill: Array(2), role: {…}}
obj.company // {name: "Samsung", skill: Array(2), role: {…}}
newObj.name = '손흥민'
newObj // {name: "손흥민", company: {…}, age: 22}
obj // {name: "홍길동", company: {…}, age: 22}
推奨型obj.companyはnewobjです.companyによって変わりますが、元のタイプのobjです.nameはnewobjです.nameとともに変化していないことが確認できます.

2. Reference


参照コードはここに単独で記載されていません.

3. Feedback


この問題は難しくないが、よく問題を読んで、問題が何を望んでいるのかを把握することが大切だ.