js, json의 길이 추측Front-end/Vanilla JS2020. 11. 11. 21:36
Table of Contents
기존에 알고 있던 코드를 개량하여,
json의 길이를 추측하는 코드를 짜 보았다.
number는 4,
string은 1,
그 이외에는 1..
좀 작게 추정해 본 것이다.
var swCho = {name: 'sw.Cho'
, age: 99
, size: {tall: 200, weight: 100}
, hobby: 'show Youtube'
, future: 'to be chicken King'};
위는 샘플 코드이다.
var deepCopyObj = (target) => {
var r = [];
if(typeof target !== 'object' || target === null)
return target;
for(i in target) {
r[i] = deepCopyObj( target[i] );
}
return r;
}
위의 코드를 이용하였다. (Core JavaScript - 정재남.. 감사합니다!!)
사실.. 위의 코드가 트리구조를 탐색한다는 것을 깨닫지 못한다면,
직접 깊이/너비 우선탐색을 공부해서 만들었을지도 모른다... 감사합니다 ㅠㅠ..
저 코드를 직접 짜 보았길 정말 다행이야..
var totalSize = 0;
var knowType = (target) => {
var r = [];
if(typeof target !== 'object' || target === null) {
var elementSize = 0;
console.log(`typeof target : ${typeof target}`);
if(typeof target === "string"){
elementSize = target.length;
}
else if(typeof target === "number") {
elementSize = 4;
}
else{
elementSize = 1;
}
totalSize += elementSize;
console.log(`totalSize : ${totalSize}`)
return `${typeof target}, ${elementSize}`;
}
for(i in target) {
r[i] = knowType( target[i] );
//console.log(r);
//console.log(`${i} : ${target[i]}`);
}
return r;
}
// output
var s = knowType(swCho);
console.log(totalSize); // 48
그리고 위를 더 개량한 코드.. 속성값의 character Length를 재었다..
var totalSize = 0;
var knowType = (target) => {
var result = [];
var elementSize = 0;
if(typeof target !== 'object' || target === null) {
console.log(`typeof target : ${typeof target}`);
if(typeof target === "string"){
elementSize = target.length;
}
else if(typeof target === "number") {
elementSize = 4;
}
else{
elementSize = 1;
}
totalSize += elementSize;
//console.log(`totalSize : ${totalSize}`);
console.log(`target : ${target}, elementSize : ${elementSize}`);
return `${typeof target}, ${elementSize}`;
}
for(key in target) {
debugger;
result[key] = knowType( target[key] );
elementSize = key.length;
console.log(`key : ${key}, key.len : ${key.length}`);
totalSize += elementSize;
//console.log(result);
//console.log(`${key} : ${target[key]}`);
}
return result;
}
이론상 swCho의 길이는 총 80이 나와야 한다.. 그러나 82가 나온다.
이는 size, tall, weight이 아닌, tall, weight, weight이 나오기 때문. 이것의 이유는
key값이 클로저의 성질(i : 내부의 변수가 없을 경우 외부의 변수를 참조한다)에 따르기 떄문..
key값이 size를 그대로 못 가지고 있기 때문에 weight을 가져온다.
var totalSize = 0;
var knowType = (target) => {
var result = [];
var elementSize = 0;
if(typeof target !== 'object' || target === null) {
console.log(`typeof target : ${typeof target}`);
if(typeof target === "string"){
elementSize = target.length;
}
else if(typeof target === "number") {
elementSize = 4;
}
else{
elementSize = 1;
}
totalSize += elementSize;
//console.log(`totalSize : ${totalSize}`);
console.log(`target : ${target}, elementSize : ${elementSize}`);
return `${typeof target}, ${elementSize}`;
}
for(key in target) {
debugger;
elementSize = key.length;
console.log(`key : ${key}, key.len : ${key.length}`);
totalSize += elementSize;
result[key] = knowType( target[key] );
//console.log(result);
//console.log(`${key} : ${target[key]}`);
}
return result;
}
console.log(totalSize); // 80
코드를 정리하자.
var totalSize = 0;
var knowType = (target) => {
var result = [];
var elementSize = 0;
if(typeof target !== 'object' || target === null) {
if(typeof target === "string"){
elementSize = target.length;
} else if(typeof target === "number") {
elementSize = 4;
} else{
elementSize = 1;
}
totalSize += elementSize;
return `${typeof target}, ${elementSize}`;
}
// object인 경우
for(key in target) {
elementSize = key.length;
totalSize += elementSize;
result[key] = knowType( target[key] );
}
return result;
}
'Front-end > Vanilla JS' 카테고리의 다른 글
newlecture: js es5 순수언어 part (0) | 2020.11.12 |
---|---|
youtube 총 재생 시간 구하기 @@ !! (0) | 2020.11.11 |
ellie: JSON (0) | 2020.11.11 |
ellie : 객체 정리 (0) | 2020.11.11 |
ellie : 함수.. 문법 정리 (0) | 2020.11.11 |
@philo0407 :: Philo의 다락방
hi hello... World >< 가장 아름다운 하나의 해답이 존재한다
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!