js, json의 길이 추측
기존에 알고 있던 코드를 개량하여,
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;
}
JavaScript data types and data structures
Programming languages all have built-in data structures, but these often differ from one language to another. This article attempts to list the built-in data structures available in JavaScript and what properties they have. These can be used to build other
developer.mozilla.org
배열 · JavaScript로 만나는 세상
No results matching ""
helloworldjavascript.net
[JavaScript] 문자열의 바이트(Byte) 길이를 구하는 방법
인터넷 상에 문자열의 Byte 길이를 체크하는 루틴이 다양하게 공개되어 있는데, 대부분은 for문을 돌려서 2바이트 문자들을 구분하고 값을 더하는 형태로 구현되어 있다. 더 좋은 방법은 없을까하
programmingsummaries.tistory.com