자바스크립트 예제모음

JSON 값에서 키 완전히 제거하기

전체 문자열 배열 폼관련
등록일 :

undefined 값을 설정하면 키가 제거됩니다


JSON 객체에서 특정키를 완전히 제거하는 방법입니다.
값을 지우는게 아닌 키 자체를 완전히 제거하는 방법입니다.

아래 예제를 봅시다 ^^

자바스크립트

// JSON 정의
var com = {
	"cpu":"Intel Xeon Westmere E5620 2.40Ghz / 12MB L3",
	"ram":"DDR3 PC-12800R 6GB(R-ECC)",
	"hdd":"SSD 80GB X 1EA",
	"traffic":"1 Gbps",
	"rack":"1U",
	"cpu_ea":"1",
	"core_ea":"4"
};


// cpu 키값 제거
com.cpu = undefined;


// (추가된 내용) delete 를 사용해서 제거해도 됩니다.
// delete com.cpu;


// 아래는 값만 변경, 혹시나 하지만 키는 유지
com.ram = false;
com.hdd = null;


// undefined 값을 설정하면 됩니다.
// 참고로 null, false 는 그냥 값으로 설정 되므로 키가 제거되지 않습니다.



키를 제거할 일이 생겼는데 혹시나 하는 마음에
undefined 를 해보니 제거가 되었네요.

추가된 내용 : delete 를 사용해서 제거해도 됩니다. ^^;
이게 더 정확한 방법입니다.

결과를 살펴 봅시다

위 예제에서 처리된 내용을 아래 버튼을 누르면 볼 수 있습니다.
cpu 키는 제거된 것을 볼 수 있습니다.

HTML

<button type="button" onclick="alert(JSON.stringify(com))">JSON 문자열 값으로 보기</button>


JSON.stringify(JSON객체) 를 하면 문자열로 변환이 됩니다.

호기심


변수에 이 방법을 시도해 보았습니다.

변수가 제거 된것 같지는 않아 보였고 undefined 라고 나오는 것으로 보니
undefined 로 값이 정의(?) 된것 같네요.

정의되지 않은 변수를 호출하면 스크립트 에러가 나지만
위 방법을 쓴 변수를 호출하면 에러가 나지 않습니다.

즉 한번 선언된 변수는 제거가 되지 않는것 같네요.
하지만 객체안에 선언된 키는 제거가 됩니다.


추가 : delete 를 사용해도 한번 선언된 변수는 제거되지 않네요.

마지막 실험

준비
1. aa, bb, cc 변수를 대상으로 실험합니다.
2. aa 만 undefined 로 선언하고 bb, cc 는 아예 선언하지 않습니다.

alert 창을 사용해서 봅니다.

결과
1. aa 는 당연히 undefined 입니다.
2. bb 는 typeof 로 확인해 보면 undefined 입니다. (bb는 아예 정의 되지 않음)
3. 그런데 aa 와 bb는 값이 다르다고 판단되네요. 둘다 undefined 아니던가요 .. ㄷㄷ
4. bb 와 cc 는 같다고 판단되는군요. 애초에 존재하지 않는 것과 존재하는것의 차이인가 봅니다.

아래 버튼을 눌러보세요~

HTML

<button type="button" onclick="alert(typeof aa)">typeof aa</button>
<button type="button" onclick="alert(typeof bb)">typeof bb</button>
<button type="button" onclick="alert(aa === typeof bb)">aa === typeof bb</button>
<button type="button" onclick="alert(typeof bb === typeof cc)">typeof bb === typeof cc</button>

자바스크립트

// bb 와 cc 는 정의하지 않음
var aa = undefined;


결론 : 흔적은 지울 수 없다(!?), 착하게 살자. @_@:

잘못한 일에 아무리 사과하고 처벌을 받았더라도 그게 없었던 일이 되는게 아닌것 처럼요.
다소 철학적(?) 이네요. 뜻밖의 마무리군요. (원래 이걸 생각한건 아닙니다)

그런면에서 aa === typeof bb 가 false 로 되는게 맞는것 같네요.