[JS 알고리즘 문제] #3 Extend

in #kr-dev6 years ago


[문제]
두 개의 객체가 주어졌을 때, 두번째 객체의 모든 프로퍼티를 첫번째 객체로 추가하는 프로그램을 작성하라.
이때, 첫번째 객체에 없는 key를 추가하고, 두번째 객체를 변경하지 마라.
두번째 객체로부터 새로운 key가 추가된, 첫번째 객체를 리턴하라.

function extend(obj1, obj2) {
    // your code
}



[예제] 

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



[알고리즘] 

  • for in문을 돌려, 두번째 객체의 key를 하나씩 체크한다.
  • 이때, 두번째 객체의 key가 첫번째 객체에 포함되는지 확인한다.
  • 포함이 안되어있으면, 그 key와 value를 첫번재 객체에 추가한다.
  • 첫번째 객체를 리턴한다.


[Solution] 

function extend(obj1, obj2) {
 for (var key in obj2) {
     if (!(obj1.hasOwnProperty(key))) {
         obj1[key] = obj2[key];
        } 
    }
 return obj1;
}
Sort:  

ES6 부터는 Object spreading : {...obj1, ...obj2}
뒤에 나오것이 앞에 나오는 것을 업데이트 합니다.
결과처럼 나오게 하려면 순서를 바꾸면 될 것 같네요...

오 그렇군요! 한번 찾아서 공부해 보겠습니다! 감사합니다!!

extend(a,b) 하면 새로운 c 가 리턴되고 a, b 는 그대로일 것 같지 않나요?

  1. extend 라는 이름이 적합한지
  2. 어떤 것이 변하고 변하지 말아야 할지
    신경쓸게 좀 있네요...

아, 기본적으로 제공되는 알고리즘 문제를 바탕으로 문제를 풀고, 정리하고 있습니다. extend 말고 더 적합한 이름이 어떤게 있을까요? ㅎㅎ