• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

안녕하세요

21.02.05 23:36 작성 조회수 85

0

안녕하세요 강사님.

이전 질문과 같이 따라해보다가 문제가 있어.. 구글링 해봐도 알기 힘들어 여쭤봅니다.

function replace(key, value) {

  if (typeof value === "string") {

    return undefined;

  }

  return 5;

}

var obj = {foundation: "Mozilla", model: "box", week: 45, transport: "car", month: 7};

var json = JSON.stringify(obj, replace);

console.log(json);

와 같이 코딩했습니다.

제가 생각한 결과는 밸류가 string 타입인 프로퍼티는 모두 삭제되고 나머지 프로퍼티의 밸류가 5로 대체된 문자열이 나올것이라 생각했습니다만 단순히 5만 나옵니다.

예상결과 : {"week":5,"month":5}

실제결과: 5

어떤것이 결과를 다르게 하는 걸까요??

왜 밸류값들만 대체되는게 아니라 전체 데이터가 바뀌는걸까요??

답변 1

답변을 작성해보세요.

0

function replace(key, value) {
  if (typeof value === "string") {
    return undefined;
  }
  //5를 value 바꾸면, 원하는 결과는 아니지만 {week: 45, month: 7} 반환됩니다. 
  return value;
}

JSON.stringify(obj, replace)의 두 번째 파라미터는 일반적으로 사용하지 않습니다.
두 번째 기능 자체가 코드의 가독성이 떨어집니다.
JSON.stringify()를 실행하기 전에 obj의 데이터를 for-in 문 등의 방법으로 걸러낸 후 처리하는 것이 일반적입니다.
강좌에서도 언급했지만 JSON.stringify(obj, replace)의 두 번째 파라미터 기능은 그렇게 좋은 기능이 아닙니다.
이런 기능이 있다는 정도로 넘기고 사용하지 않는 것이 나을 것 같습니다.