Code States. Java Script Basic [4. 12]

Zunky Park
Jun 13 · 2 min read

Write a function called “extend”.

Given two objects, “extend” adds properties from the 2nd object to the 1st object.

Notes:

  • Add any keys that are not in the 1st object.
  • If the 1st object already has a given key, ignore it (do not overwrite the property value).
  • Do not modify the 2nd object at all.

var obj1 = {
  a: 1,
  b: 2
};
var obj2 = {
  b: 4,
  c: 3
};

extend(obj1, obj2);

console.log(obj1); // --> {a: 1, b: 2, c: 3}
console.log(obj2); // --> {b: 4, c: 3}

이와 같이, obj1에 없는 key를 obj2가 갖고 있을 때, obj1에 넣어준다.


이중 for문을 이용해서 풀었다.


function extend(obj1, obj2) {

  for(var i = 0; i<Object.keys(obj2).length; i = i+1){
    var cnt = 0;
    for(var k = 0; k<Object.keys(obj1).length; k = k+1){
      if (Object.keys(obj2)[i] !== Object.keys(obj1)[k]){
        cnt = cnt + 1;
      }
        if(cnt === Object.keys(obj1).length){
        obj1[Object.keys(obj2)[i]] = Object.values(obj2)[i];
        }
      } 
    }
  }

원래 솔루션과 비교하면 code line이 매우 길고 복잡하다.

JavaScript의 for…in 문에 대해 제대로 이해하지 못한 결과라고 생각한다.


function extend(obj1, obj2) {
  for(let key in obj2) {
    if(!(key in obj1)) {
      obj1[key] = obj2[key];
    }
  }
}

여기서는 in 연산자가 사용되었다. 다음은 in 연산자의 기본적인 사용법이다.

var trees = new Array("redwood", "bay", "cedar", "oak", "maple");
0 in trees         // true를 반환합니다.
3 in trees         // true를 반환합니다.
(1 + 2) in trees   // true를 반환합니다. 연산자 우선 순위에 의하여 이 구문의 괄호는 없어도 됩니다.
6 in trees         // false를 반환합니다.var myCar = {company: "Lamborghini", model: "Lamborghini Veneno Roadster", year: 2014};
"company" in myCar // true를 반환합니다.
"model" in myCar   // true를 반환합니다.

솔루션 코드에서 조건문 !(key in obj1) 을 따져보면, obj1에 key가 있는지 없는지 true, false를 반환한다.

for … in 구문을 통해 obj2의 key로 계산하는 것이다.

for (let key in obj2)를 통해 key가 b일때, c일때를 따져준다.

Object.assign(obj1, Object.assign({}, obj2, obj1));