-
카테고리
-
세부 분야
프로그래밍 언어
-
해결 여부
미해결
안녕하세요
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
어떤것이 결과를 다르게 하는 걸까요??
왜 밸류값들만 대체되는게 아니라 전체 데이터가 바뀌는걸까요??
답변을 작성해보세요.
0
김영보
지식공유자2021.02.06
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)의 두 번째 파라미터 기능은 그렇게 좋은 기능이 아닙니다.
이런 기능이 있다는 정도로 넘기고 사용하지 않는 것이 나을 것 같습니다.
답변 1