JavaScript

숙제4 - 나이든 유저

차돌박이츄베릅 2023. 5. 29. 00:13

문제

가장 아래의 코드가 실행 되었을 때, “Passed ~” 가 출력되도록 getAge 함수를 채워주세요

var user = {
    name: "john",
    age: 20,
}

var getAged = function (user, passedTime) {
        // 여기를 작성해 주세요!
}


var agedUser = getAged(user, 6);

var agedUserMustBeDifferentFromUser = function (user1, user2) {
    if (!user2) {
            console.log("Failed! user2 doesn't exist!");
      } else if (user1 !== user2) {
        console.log("Passed! If you become older, you will be different from you in the past!")
    } else {
        console.log("Failed! User same with past one");
    }
}

agedUserMustBeDifferentFromUser(user, agedUser);

 

 


내가 작성한 코드

처음엔 return true 이러다가 너무 양아친가 싶어서 출제의도(?)를 고려하여 다시 작성했다.

참조를 피하기위해 값을 새로 ㄱㄱ

var user = {
    name: 'john',
    age: 20,
};

var getAged = function (user, passedTime) {
    // (user, 6)
    // 여기를 작성해 주세요!
    // return true

    // name: user.name;
    // age: user.age;
    // passedTime: user.passedTime;

    // 여기는 함수니까
    // user2를 뱉어내야됨
    return { name: user.name, age: user.age + passedTime, passedTime: passedTime };
};

var agedUser = getAged(user, 6);

var agedUserMustBeDifferentFromUser = function (user1, user2) {
    if (!user2) {
        console.log("Failed! user2 doesn't exist!");
    } else if (user1 !== user2) {
        console.log('Passed! If you become older, you will be different from you in the past!');
    } else {
        console.log('Failed! User same with past one');
    }
};

agedUserMustBeDifferentFromUser(user, agedUser);

console.log('user => ', user);
console.log('getAged => ', agedUser);
console.log('참조값 비교 => ', user == agedUser);

 

정답

참조를 피하기 위해 for in문으로 요소 하나하나를 순회하면서 복사

var user = {
    name: "john",
    age: 20,
}

// 객체 만들어 프로퍼티 복사하기
var getAged = function (user, passedTime) {
    var result = {};
    for (var prop in user) { // user안의 key가 prop에 계속 할당 됨
        result[prop] = user[prop]; // result의 key를 user의 해당 key의 값으로 채워넣어라
    }
    result.age += passedTime;
    return result;
}


var agedUser = getAged(user, 6);

var agedUserMustBeDifferentFromUser = function (user1, user2) {
    if (user1 !== user2) { // 참조형 ㄴㄴ. 여기서 걸려버림 -> 순회하면서 만들어야돼
        console.log("Passed! If you become older, you will be different from you in the past!")
    } else {
        console.log("Failed! User same with past one");
    }
}

agedUserMustBeDifferentFromUser(user, agedUser);