Comparing version 0.0.1 to 0.0.2
943
clean.js
@@ -14,6 +14,9 @@ // 요기는 패키지 정보를 담고있어요. | ||
// 데이터 처리 | ||
object : {}, | ||
function : {}, | ||
array : {}, | ||
object : {}, | ||
date : {}, | ||
string : {}, | ||
integer : {}, | ||
bool : {}, | ||
@@ -24,3 +27,3 @@ // helpers | ||
valid : {}, | ||
random : {}, | ||
helper : {}, | ||
@@ -32,3 +35,6 @@ // 브라우저 전용 패키지들 | ||
// 모듈 | ||
module : {} | ||
module : {}, | ||
// 다국어 지원 (i18n) | ||
korean : {} | ||
}; | ||
@@ -41,6 +47,82 @@ | ||
// NaN, false, undefined, empty value를 제외한 값을 반환한다 | ||
clean.array.compact = function(array) { | ||
// REDUIRED array | ||
return clean.array.filter(array, function(value) { | ||
// 한방에 할 수 있는거 없나요 ㅠㅠ | ||
if(value !== 'undefined' && !isNaN(value) && value !== false && value !== 0 && value !== '') { | ||
return true | ||
} else { | ||
return false | ||
} | ||
}); | ||
} | ||
// 배열 요소가 포함되어있는지 확인 | ||
clean.array.contains = function(array, search) { | ||
// REQUIRED array | ||
// REQUIRED search | ||
// 배열이 아니거나 값이없으면 false | ||
if (!clean.is.array(array) || array.length == 0) return false; | ||
// 인덱스 검사 | ||
if (array.indexOf === Array.prototype.indexOf) return array.indexOf(search) != -1; | ||
// indexOf가 없다면 값을 찾는다 | ||
var check = false; | ||
var | ||
// 인덱스에요. | ||
index, leng; | ||
// 모든 요소를 둘러봅니다. | ||
for ( index = 0, leng = array.length; index < leng; index++) { | ||
// 요소를 callback으로 쏴줘요! | ||
// callback 에서 elem 혹은 this로 개별 변수에 접근합니다. | ||
if(array[index] === search) check = true; break; | ||
} | ||
return check; | ||
} | ||
// 배열에서 해당 값이 몇개 존재하는지 찾기 | ||
clean.array.count = function(array, search) { | ||
// REQUIRED: array | ||
// REQUIRED: value | ||
var | ||
// 카운트 | ||
count = 0; | ||
// 배열의 값을 하나씩 보면서, | ||
clean.array.each(array, function(value) { | ||
// 검사가 일치하면! | ||
if (search === value) count++; | ||
}); | ||
// 최종적으로 찾은 값 반환 | ||
return count; | ||
}; | ||
clean.array.difference = function() { | ||
// OPTIONAL array, array, array... | ||
var result = []; | ||
// 모든 배열을 합친다! | ||
clean.object.each(arguments, function(array) { | ||
result = result.concat(array); | ||
}); | ||
return clean.array.filter(result, function(value) { | ||
// 하나씩만 있는 것들을 찾아낸다. | ||
return clean.array.count(result, value) === 1; | ||
}); | ||
} | ||
// 배열의 요소를 각각 처리한다! | ||
clean.array.each = function(array, callback) { | ||
//REQUIRED: array | ||
//REQUIRED: callback(elem, index of elem){...} | ||
// REQUIRED: array | ||
// REQUIRED: callback(elem, index of elem){...} | ||
@@ -59,6 +141,27 @@ var | ||
// 배열의 모든 멤버가 지정된 조건에 충족하는지 여부를 확인합니다. | ||
clean.array.every = function(array, callback, args) { | ||
// REQUIRED: array | ||
// REQUIRED: callback(elem, index of elem, args){...} | ||
// OPTIONAL: args | ||
var | ||
// 인덱스에요. | ||
index, leng; | ||
// 모든 요소를 둘러봅니다. | ||
for ( index = 0, leng = array.length; index < leng; index++) { | ||
// 모두 조건에 부합해야 true, 그 외에는 false | ||
if(!callback.apply(array[index], [array[index], index], [array[index], index, args])) { | ||
return false; | ||
} | ||
} | ||
return true; | ||
}; | ||
// 배열에서 값들 찾아갖고 배열로 반환! | ||
clean.array.filter = function(array, check) { | ||
//REQUIRED: array | ||
//REQUIRED: check | ||
// REQUIRED: array | ||
// REQUIRED: check | ||
@@ -86,4 +189,4 @@ var | ||
clean.array.find = function(array, check) { | ||
//REQUIRED: array | ||
//REQUIRED: check | ||
// REQUIRED: array | ||
// REQUIRED: check | ||
@@ -112,5 +215,94 @@ var | ||
// 배열의 첫번째 요소를 n만큼 반환한다. | ||
clean.array.first = function(array, n) { | ||
// REQUIRED: array | ||
// OPTIONAL n | ||
// 결과 | ||
var result = []; | ||
// 배열길이 | ||
var length=array.length; | ||
n = arguments[1] || 1; | ||
// 배열이고 사이즈가 0보다 크며 n이 양수인 경우 | ||
if(clean.is.array(array) && length > 0 && n > 0) { | ||
result = array.slice(0, n); | ||
} | ||
return result; | ||
}; | ||
// 배열들의 교집합을 구한다. | ||
clean.array.intersection = function(array) { | ||
// REQUIRED array | ||
// OPTIONAL array arguments | ||
// 인자로 들어온 배열들을 하나의 배열로! | ||
var rest = Array.prototype.slice.call(arguments, 1); | ||
// 필터링 | ||
return clean.array.filter(clean.array.unique(array), function(value) { | ||
// 나머지 배열들에 대해서 각 배열들의 배열요소가 값과 일치하는지 | ||
// 일치 한다면 필터에 걸린다! | ||
return clean.array.every(rest, function(other) { | ||
return clean.array.contains(other, value); | ||
}); | ||
}); | ||
} | ||
// 배열 요소에 대해 method 함수를 invoke 한다. | ||
clean.array.invoke = function(array, method) { | ||
// REQUIRED array | ||
// REQUIRED method | ||
// OPTIONAL args, args, args... | ||
// argument가 있으면.. | ||
var args = Array.prototype.slice.call(arguments, 2); | ||
// 배열을 돌면서 | ||
return clean.array.map(array, function(value) { | ||
// 함수 실행 | ||
return (clean.is.func(method) ? method : value[method]).apply(value, args); | ||
}); | ||
}; | ||
// 배열의 마지막 요소를 n만큼 반환한다. | ||
clean.array.last = function(array, n) { | ||
// REQUIRED: array | ||
// OPTIONAL n | ||
// 결과 | ||
var result = []; | ||
// 배열길이 | ||
var length=array.length; | ||
n = arguments[1] || 1; | ||
// 배열이고 사이즈가 0보다 크며 n이 양수인 경우 | ||
if(clean.is.array(array) && length > 0 && n > 0) { | ||
result = array.slice(-n); | ||
} | ||
return result; | ||
}; | ||
// 배열 요소에 callback 처리한 배열을 구한다 | ||
clean.array.map = function(array, callback) { | ||
// REQUIRED: array | ||
// REQUIRED: callback | ||
var result = []; | ||
// callback 처리한 값의 배열을 반환 | ||
clean.object.each(array, function(value) { | ||
result.push(callback(value)); | ||
}); | ||
return result; | ||
}; | ||
// 배열에서 최대 값 찾기 | ||
clean.array.max = function(array) { | ||
//REQUIRED: array | ||
// REQUIRED: array | ||
@@ -137,3 +329,3 @@ var | ||
clean.array.min = function(array) { | ||
//REQUIRED: array | ||
// REQUIRED: array | ||
@@ -158,2 +350,128 @@ var | ||
// 키배열과 값배열을 가지고 객체 생성 | ||
clean.array.object = function(array, values) { | ||
// REQUIRED array | ||
// REQUIRED values | ||
var result = {}; | ||
clean.array.each(array, function(value, index) { | ||
// 키값에 값을 집어넣는다! | ||
result[value] = values[index]; | ||
}); | ||
return result; | ||
} | ||
// 배열을 해당 범위만큼 만든다 | ||
clean.array.range = function(start, stop, step) { | ||
// OPTIONAL start | ||
// REQUIRED: stop | ||
// OPTIONAL step | ||
var array = []; | ||
var index; | ||
var argLength = arguments.length; | ||
// 인자가 정수가 아니면 빈 배열을 리턴 | ||
for(index=0; index<argLength; index++) { | ||
if(clean.is.integer(arguments[index]) === false) { | ||
return array; | ||
} | ||
} | ||
// 인자가 하나인 경우 stop으로 간주 | ||
if (arguments.length <= 1) { | ||
stop = start; | ||
start = 0; | ||
} | ||
step = arguments[2] || 1; | ||
for(index=start; index < stop; index = index + step) { | ||
array.push(index); | ||
} | ||
return array; | ||
}; | ||
// 조건에 해당하지 않는 객체만 배열로 반환 | ||
clean.array.reject = function(array, check) { | ||
//REQUIRED: array | ||
//REQUIRED: check | ||
var result = []; | ||
clean.array.each(array, function(value) { | ||
// 조건에 안맞으면! | ||
if(!check(value)) { | ||
result.push(value); | ||
} | ||
}); | ||
return result; | ||
}; | ||
// 배열에서 값을 제거 한다. | ||
clean.array.remove = function(array) { | ||
// REQUIRED: array | ||
// OPTIONAL element, element, element... | ||
// 결과 배열 | ||
var result = array.slice(0); | ||
clean.object.each(arguments, function(arg, key) { | ||
// 해당 배열 외 인자값이 있다면 | ||
if(key > 0) { | ||
var index = result.indexOf(arg); | ||
if(index > -1) { | ||
// 존재하는 값을 제거한다. | ||
result.splice(index, 1); | ||
} | ||
} | ||
}); | ||
return result; | ||
} | ||
// 배열들의 합집합을 구한다. | ||
clean.array.union = function() { | ||
// OPTIONAL array, array, array... | ||
var result = []; | ||
// 모든 배열을 합친다! | ||
clean.object.each(arguments, function(array) { | ||
result = result.concat(array); | ||
}); | ||
// 유니크한 값만 고르기! | ||
return clean.array.unique(result); | ||
} | ||
// 배열에서 유니크한 값만 뽑아낸다 | ||
clean.array.unique = function(array) { | ||
// REQUIRED: array | ||
// 결과 | ||
var result = []; | ||
// 배열의 값을 하나씩 보면서, | ||
clean.array.each(array, function(value) { | ||
// value 를 포함하고 있지 않으면 푸시! | ||
if (!clean.array.contains(result, value)) { | ||
result.push(value); | ||
} | ||
}); | ||
return result; | ||
}; | ||
// true, false 중 랜덤하게 반환~! | ||
clean.bool.random = function() { | ||
// 0 이나 1 중에 랜덤하게 받아와서 0이면 false, 1이면 true!! | ||
return clean.integer.random(1) === 1; | ||
}; | ||
// 쿠키를 로드해요! | ||
@@ -213,18 +531,9 @@ clean.cookie.get = function(name) { | ||
//getMonth 달을 구한다. 혹시나 ...아주 나중에.... | ||
//진짜 나중에.... clean에서 다국어 지원한다면 요긴하게 쓰이겠지만... | ||
//아마 안쓰일꺼예요.... 아 그냥 그렇다구 | ||
clean.dom.getMonth = function (int_month){ | ||
//REQUIRED: month : 숫자값이예유~ | ||
var month_array = new Array("1월", "2월", "3월", | ||
"4월", "5월", "6월", | ||
"7월", "8월", "9월", | ||
"10월", "11월", "12월") | ||
return month_array[int_month] | ||
} | ||
// 날자를 읽기 편하게 보여줘용(YYYY-mm-dd HH:ii:ss) | ||
clean.date.getTimeStamp = function() { | ||
//COMMENT: 형식도 바꿀 수 있게 하면 어떨까요?! | ||
clean.date.timestamp = function() { | ||
var | ||
//요 내부꺼는 좀더 간단하게 할수있음 알려주세용.. 무식하게 돌리는거라.... 따로 함수로 빼긴 그렇고... | ||
this.leadingZeros = function(n, digits) { | ||
leadingZeros = function(n, digits) { | ||
//REQUIRED: n: 숫자에요~! | ||
@@ -248,9 +557,9 @@ //REQUIRED: search: 0을 표시해줄 자릿수예요!! | ||
var result = | ||
this.leadingZeros(d.getFullYear(), 4) + '-' + | ||
this.leadingZeros(d.getMonth() + 1, 2) + '-' + | ||
this.leadingZeros(d.getDate(), 2) + ' ' + | ||
leadingZeros(d.getFullYear(), 4) + '-' + | ||
leadingZeros(d.getMonth() + 1, 2) + '-' + | ||
leadingZeros(d.getDate(), 2) + ' ' + | ||
this.leadingZeros(d.getHours(), 2) + ':' + | ||
this.leadingZeros(d.getMinutes(), 2) + ':' + | ||
this.leadingZeros(d.getSeconds(), 2); | ||
leadingZeros(d.getHours(), 2) + ':' + | ||
leadingZeros(d.getMinutes(), 2) + ':' + | ||
leadingZeros(d.getSeconds(), 2); | ||
@@ -262,6 +571,22 @@ return result; | ||
clean.date.now = function() { | ||
// 지금은 지금이다! | ||
// 롸잇! 나우! | ||
return new Date(); | ||
}; | ||
// 문서 높이 구하기인데... 마땅히 어디다가 둘때가;;; | ||
//COMMENT: 여기 두심 됩니당!! ㅋㅋ 이름은 좀 변경 했어용!! | ||
clean.dom.docHeight = function() { | ||
var d = document; | ||
// 현재 문서의 높히를 구해요! | ||
return Math.max( | ||
Math.max(d.body.scrollHeight, d.documentElement.scrollHeight), | ||
Math.max(d.body.offsetHeight, d.documentElement.offsetHeight), | ||
Math.max(d.body.clientHeight, d.documentElement.clientHeight) | ||
); | ||
}; | ||
// clean.js의 셀렉터입니다! | ||
@@ -275,13 +600,58 @@ clean.dom.find = function(selectors) { | ||
// 문서 높이 구하기인데... 마땅히 어디다가 둘때가;;; | ||
clean.dom.getDocHeight = function() { | ||
//REQUIRED: 현재 문서의 높히를 구해요! | ||
/** | ||
* 특정 콘텍스트에 바인딩한 함수를 만들어서 돌려줍니다. | ||
* @param {Function} funArg | ||
* @param {Object} context | ||
* @returns {Function} {bound} | ||
*/ | ||
clean.function.bind = function (funArg, context){ | ||
var partial = Array.prototype.splice.call(arguments, 2); | ||
var d = document; | ||
return Math.max( | ||
Math.max(d.body.scrollHeight, d.documentElement.scrollHeight), | ||
Math.max(d.body.offsetHeight, d.documentElement.offsetHeight), | ||
Math.max(d.body.clientHeight, d.documentElement.clientHeight) | ||
); | ||
// 바운드 함수를 만듭니다. | ||
var Bound = function(){ | ||
// apply에 전달할 매개변수 배열이 필요합니다. | ||
var args = partial.concat( Array.prototype.splice.call(arguments, 0) ); | ||
if ( false === ( funArg instanceof Bound ) ){ | ||
return funArg.apply( context, args ); | ||
} | ||
funArg.apply( funArg, args ); | ||
} | ||
// 프로토타입 | ||
Bound.prototype = funArg.prototype; | ||
return Bound; | ||
}; | ||
// 몇초를 기다릴까나? | ||
clean.helper.delay = function(seconds, func) { | ||
// seconds 초 기달려! | ||
// 기달리고 func 실행해! | ||
setTimeout(func, seconds * 1000); | ||
}; | ||
// 랜덤 색상문자열 생성! | ||
clean.helper.randomColor = function() { | ||
// #09ab77 같은 색상문자열 반환 | ||
return '#' + ('00000' + (Math.random() * 16777216 << 0).toString(16)).substr(-6); | ||
}; | ||
// func를 몇번 수행할까나?? | ||
clean.helper.times = function(times, func) { | ||
var | ||
// index!!! | ||
i; | ||
// 0에서 times 만큼, | ||
for ( i = 0; i < tiems; i += 1) { | ||
// func를 실행한다!! | ||
// index를 넘겨주는건 덤!! | ||
func(i); | ||
} | ||
}; | ||
// 브라우저 정보를 가져옵니다. | ||
@@ -320,7 +690,51 @@ clean.info.browser = function() { | ||
// 디바이스 정보를 가져옵니다. | ||
clean.info.device = function(target) { | ||
//TODO: | ||
clean.info.device = (function(){ | ||
var agent = navigator.userAgent; | ||
var isIOS = agent.match(/(iPad|iPhone|iPod)/g) ? true : false; | ||
var ios = (function(){ | ||
if(isIOS){ | ||
var startPoint = agent.indexOf('OS '); | ||
if((agent.indexOf('iPhone') > -1 || agent.indexOf('iPad') > -1) && startPoint > -1){ | ||
return 1 * (agent.substr(startPoint + 3, 3).replace('_', '.')); | ||
} | ||
}else{ | ||
return false; | ||
} | ||
})(); | ||
// device.isIOS : IOS면 true 아니면 false | ||
// device.ios : ios7일 경우 7, ios6.1일 경우 6.1을 리턴, 아니면 false | ||
// 개인적으로는 html에 ios ios-7 클래스 등을 덧붙이도록 만들어서 사용하고 있습니다. | ||
return { | ||
isIOS : isIOS, | ||
ios : ios | ||
} | ||
})(); | ||
// 랜덤한 정수 반환~! | ||
clean.integer.random = function(min, max) { | ||
//OPTIONAL: min: 최소값 | ||
//REQUIRED: max: 최대값 | ||
// max 부분에 값이 없으면 max가 아니라 min이 입력되지 않은것. | ||
if (max === undefined) { | ||
// max 값을 되찾고, | ||
max = min; | ||
// 기본값인 0을 넣어줍니다! | ||
min = 0; | ||
} | ||
// Math 함수들을 이용해서 랜덤한 정수를 반환!!! | ||
return Math.floor(Math.random() * (max - min + 1) + min); | ||
}; | ||
//TODO: arguments 객체인지 확인하는 기능이 필요합니다!! | ||
// 배열인가? | ||
clean.is.array = function(target) { | ||
//REQUIRED: target | ||
return target instanceof Array; | ||
}; | ||
/** | ||
@@ -344,2 +758,96 @@ * 입력된 값이 정해진 문자열로만 이루어졌는지 확인 | ||
// target이 비었나?? | ||
clean.is.empty = function(target) { | ||
//REQUIRED: target | ||
var | ||
// isEmpty? | ||
// 일단은 비었다는 가정을 하고!! | ||
isEmpty = true; | ||
// target이 객체면! | ||
if (clean.is.object(target) === true) { | ||
// target의 값들을 돌아보는데, | ||
clean.object.each(target, function(value, key) { | ||
// 어? 비지 않았어?!?! | ||
// 비지 않았네?!?!? | ||
// 그럼 false!!!! | ||
isEmpty = false; | ||
// 더이상 돌아볼 필요도 없다. | ||
return false; | ||
}); | ||
} | ||
// target이 문자열이면!! | ||
else if (clean.is.string(target) === true) { | ||
// 빈 문자열이면 얄짤없지! | ||
if (target === '') { | ||
isEmpty = false; | ||
} | ||
} | ||
//TODO: 다른 type들에 대해서도 필요합니다!! | ||
return isEmpty; | ||
}; | ||
// target1, 2가 같냐? | ||
clean.is.equal = function(target1, target2) { | ||
//REQUIRED: target1 | ||
//REQUIRED: target2 | ||
var | ||
// isEqual! | ||
// 일단은 같다고 가정하고 틀리면 false로 바꿔줍시다. | ||
isEqual = true; | ||
// target들이 둘다 객체면!! | ||
if (clean.is.object(target1) === true && clean.is.object(target2) === true) { | ||
// target1의 값들을 돌아보면서, | ||
clean.object.each(target1, function(value, key) { | ||
// target1과 target2의 값이 다르면! | ||
if (target2[key] !== value) { | ||
// 이런. 다르군. | ||
isEqual = false; | ||
// each 중단! | ||
return false; | ||
} | ||
}); | ||
// 이번엔 target2의 값들을 돌아보면서, | ||
clean.object.each(target2, function(value, key) { | ||
// target1과 target2의 값이 다르면! | ||
if (target1[key] !== value) { | ||
// 이런. 다르군. | ||
isEqual = false; | ||
// each 중단! | ||
return false; | ||
} | ||
}); | ||
} | ||
//TODO: 다른 type들에 대해서도 필요합니다!! | ||
return isEqual; | ||
}; | ||
// 니 함수냐? | ||
clean.is.func = function(target) { | ||
//REQUIRED: target: 함순지 확인할 대상 | ||
// 그냥 타입을 체크하면 되는듯ㅋ 찡긋ㅋ | ||
return typeof target === 'function'; | ||
}; | ||
// 정수인가? | ||
@@ -377,3 +885,10 @@ clean.is.integer = function(target) { | ||
*/ | ||
// 객체인가? | ||
clean.is.object = function(target) { | ||
//REQUIRED: target: 객체인지 확인할 대상 | ||
// typeof로 후려쳤습니다. | ||
return typeof target === 'object'; | ||
}; | ||
// 문자열인가? | ||
@@ -386,8 +901,31 @@ clean.is.string = function(target) { | ||
// IE에서 toString에 접근하기 위해서는 Object.prototype.toString으로 접근해야합니다. | ||
// 브라우져에 상관없이 쓸 수 있는 typeof을 쓰는 건 어떨가요? | ||
// typeof (new String('abc')) === "object"라는 tipjs님의 말씀에 따라 instanceof 검사로직을 추가합니다. | ||
return typeof target === 'string' || target instanceof String; | ||
// IE에서 toString에 접근하기 위해서는 Object.prototype.toString으로 접근해야합니다. | ||
// 브라우져에 상관없이 쓸 수 있는 typeof을 쓰는 건 어떨가요? | ||
// typeof (new String('abc')) === "object"라는 tipjs님의 말씀에 따라 instanceof 검사로직을 추가합니다. | ||
return typeof target === 'string' || target instanceof String; | ||
//COMMENT: 매우 만족합니당! | ||
}; | ||
// 달을 구한다. 혹시나 ...아주 나중에.... | ||
// 진짜 나중에.... clean에서 다국어 지원한다면 요긴하게 쓰이겠지만... | ||
// 아마 안쓰일꺼예요.... 아 그냥 그렇다구 | ||
//COMMENT: ㅋㅋ 한국어 지원인 만큼 korean 패키지로 이동했습니다. | ||
clean.korean.month = function (month){ | ||
//REQUIRED: month: 숫자값이예유~ | ||
var monthArray = new Array("1월", "2월", "3월", | ||
"4월", "5월", "6월", | ||
"7월", "8월", "9월", | ||
"10월", "11월", "12월"); | ||
return monthArray[month]; | ||
}; | ||
// 문자열의 특정 값들을 치환하는 템플릿을 생성합니다!! | ||
clean.string.Template = function() { | ||
//TODO: 작성 필요 | ||
}; | ||
/** | ||
@@ -580,2 +1118,27 @@ * 공통으로 사용되는 인터랙션에 관련된 스크립트를 모아둔 모듈. | ||
// 객체 파워 복사!!! | ||
clean.object.copy = function(object) { | ||
//REQUIRED: object | ||
//TODO: deep copy를 구현해야함!! | ||
//TODO: 이것을 하기 위해선 array copy와 date형 copy등이 필요함!! | ||
}; | ||
// object를 살펴보면서, 이미 있는건 무시하고 없는건 defaults에서 넣어줍니당당 | ||
clean.object.defaults = function(object, defaults) { | ||
//REQUIRED: object | ||
//REQUIRED: defaults | ||
// defaults의 프로퍼티들을 살펴보면서, | ||
clean.object.each(defaults, function(value, key) { | ||
// 읎네??? | ||
if (clean.object.has(object, key) === false) { | ||
// 자! 가져라! | ||
object[key] = value; | ||
} | ||
}); | ||
}; | ||
// 객체의 프로퍼티를 각각 처리한다! | ||
@@ -597,3 +1160,6 @@ clean.object.each = function(object, callback) { | ||
// 프로퍼티의 값과 키를 callback으로 쏴줘요! | ||
callback(object[key], key); | ||
// 만약 callback의 결과값이 false면 더이상 살펴보지 않고 중단! | ||
if (callback(object[key], key) === false) { | ||
break; | ||
} | ||
} | ||
@@ -603,2 +1169,70 @@ } | ||
// 객체 확!장! | ||
clean.object.extend = function(object, extend) { | ||
//REQUIRED: object: 본래 객체 | ||
//REQUIRED: extend: 확장 객체 | ||
// 확장 객체의 프로퍼티들을 살펴보면서, | ||
clean.object.each(extend, function(value, key) { | ||
// 본래 객체에 없는거면, | ||
if (clean.object.has(extend, key) === false) { | ||
// 과감하게 삽입!!! | ||
object[key] = value; | ||
} | ||
}); | ||
}; | ||
// object 내의 function들의 key을 반환해주는 기능!!! | ||
clean.object.functionKeys = function(object) { | ||
//REQUIRED: object | ||
var | ||
// 쓕쓕 뽑아냅시다. | ||
functionKeys = []; | ||
// 객체의 프로퍼티들을 살펴보면서, | ||
clean.object.each(object, function(value, key) { | ||
// 값이 function 이면! | ||
if (clean.is.func(value)) { | ||
// function key들을 솹윕! | ||
functionKeys.push(key); | ||
} | ||
}); | ||
// 뽑아낸 funcion key들을 반환! | ||
return functionKeys; | ||
}; | ||
// object에 특정 값이 있는지 확인합니다!! | ||
clean.object.has = function(object, key) { | ||
//REQUIRED: object | ||
//REQUIRED: key | ||
// 너 그 값 안갖고있냐? | ||
return object[key] !== undefined; | ||
}; | ||
// object를 key와 value의 순서를 바꾸어주는 기능! | ||
clean.object.invert = function(object) { | ||
//REQUIRED: object | ||
var | ||
// 바꿔 바꿔~! 모든걸 다바꿔~! | ||
invert = {}; | ||
// 객체의 프로퍼티들을 살펴보면서, | ||
clean.object.each(object, function(value, key) { | ||
// invert 객체의 value에 key를 값으로다가 삽입!!! | ||
invert[value] = key; | ||
}); | ||
// 만들어진 invert 반환! | ||
return invert; | ||
}; | ||
// object의 키들을 배열로 반환하는 함수 | ||
@@ -614,2 +1248,3 @@ clean.object.keys = function(object) { | ||
clean.object.each(object, function(value, key) { | ||
// 키들을 배열에 넣습니다. | ||
@@ -623,2 +1258,78 @@ keys.push(key); | ||
// object의 특정 값들을 제외하고 뽑아내는 기능!!! | ||
clean.object.omit = function(object) { | ||
//REQUIRED: object | ||
//OPTIONAL: arguments[1], arguments[2]...: 제외할 값들의 key!!! | ||
var | ||
// 뽑아낸 값들을 갖고있을 객체!~! | ||
omit = {}; | ||
// 객체의 프로퍼티를 일단 넣는다! | ||
clean.object.each(object, function(value, key) { | ||
// 쑤우우우욱~~ | ||
omit[key] = value; | ||
}); | ||
// omit 함수를 실행할 때 넘어온 arguments 들을 돌아보면서... | ||
clean.object.each(arguments, function(value) { | ||
// 대상이 되는 object는 넘기고~~ 넘기고~~ | ||
if (value !== object) { | ||
// 파워제거! | ||
// arguments의 value가 제거할 값들의 key니까 이렇게... | ||
delete omit[value]; | ||
} | ||
}); | ||
// 뽑아낸 객체를 반환!~! | ||
return omit; | ||
}; | ||
// object를 [key, value] 배열로 바꾸어주는 기능!! | ||
clean.object.pairs = function(object) { | ||
//REQUIRED: object | ||
var | ||
// [key, value] 배열! | ||
pairs = []; | ||
// 객체의 프로퍼티들을 살펴보면서, | ||
clean.object.each(object, function(value, key) { | ||
// [key, value]를 배열에 넣습니다! | ||
pairs.push([key, value]); | ||
}); | ||
// 최종적으로 [key, value] 배열 반환! | ||
return pairs; | ||
}; | ||
// object의 특정 값들을 뽑아내는 기능!!! | ||
clean.object.pick = function(object) { | ||
//REQUIRED: object | ||
//OPTIONAL: arguments[1], arguments[2]... | ||
var | ||
// 뽑아낸 값들을 갖고있을 객체!~! | ||
pick = {}; | ||
// pick 함수를 실행할 때 넘어온 arguments 들을 돌아보면서... | ||
clean.object.each(arguments, function(value) { | ||
// 대상이 되는 object는 넘기고~~ 넘기고~~ | ||
if (value !== object) { | ||
// 파워삽입! | ||
// arguments의 value가 뽑아낼 값들의 key니까 이렇게... | ||
pick[value] = object[value]; | ||
} | ||
}); | ||
// 뽑아낸 객체를 반환!~! | ||
return pick; | ||
}; | ||
// object의 값들을 배열로 반환하는 함수 | ||
@@ -634,2 +1345,3 @@ clean.object.values = function(object) { | ||
clean.object.each(object, function(value) { | ||
// 키들을 배열에 넣습니다. | ||
@@ -643,33 +1355,19 @@ values.push(value); | ||
// 랜덤 색상문자열 생성! | ||
clean.random.color = function() { | ||
// 문자열 사이 값을 출력합니다! | ||
clean.string.between = function(target, start, end) { | ||
//REQUIRED target | ||
//REQUIRED start | ||
//OPTIONAL end | ||
// #09ab77 같은 색상문자열 반환 | ||
return '#' + ('00000' + (Math.random() * 16777216 << 0).toString(16)).substr(-6); | ||
}; | ||
// 시작점 | ||
var startPos = target.indexOf(start); | ||
// 끝점 | ||
var endPos = clean.string.reverse(target).indexOf(end); | ||
// 랜덤 문자열을 반환하는 함수입니다. | ||
clean.random.string = function(size) { | ||
//REQUIRED: size: 올매나 긴 문자열을 만들건지 ㅋ | ||
startPos = startPos !== -1 ? startPos : 0; | ||
endPos = endPos !== -1 ? target.length - endPos : target.length; | ||
var | ||
// 너, 문자열. | ||
str = '', | ||
// 랜덤하게 생성 가능한 character 셋 | ||
possibleChars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', | ||
// index! | ||
i; | ||
// size까지 돌면서 | ||
for ( i = 0; i < size; i += 1) { | ||
// 문자열에서 랜덤하게 하나의 char을 끄집어 와 추가합니다! | ||
str += possibleChars.charAt(Math.floor(Math.random() * possibleChars.length)); | ||
} | ||
// 마지막으로 반! 환! | ||
return str; | ||
}; | ||
// 자릅니다! | ||
return target.substring(startPos, endPos); | ||
} | ||
// 문자열에서 해당문자가 포함되었는지 확인합니다 | ||
@@ -681,4 +1379,5 @@ clean.string.contains = function(target, search) { | ||
// search를 찾아가지고 인덱스를 확인합니다! | ||
return target.indexOf(search) >= 0; | ||
return target.indexOf(search) != -1; | ||
}; | ||
// 글자를 바이트 단위로 자릅니다 | ||
@@ -728,2 +1427,13 @@ clean.string.cutByteString = function(message, maximum) { | ||
} | ||
// 문자열을 escape합니다!! | ||
// 특히나 한국어는 escpae가 많이많이 상당히 필요하죵ㅇㅇㅇ! | ||
clean.string.escape = function(string) { | ||
//REQUIRED: string: escape 할 문자열 | ||
// encodeURIComponent를 이용합니다! | ||
// 알파벳과 숫자 외 문자를 모두 escape!! | ||
// http://도 http%3A%2F%2F로 바껴요! | ||
return encodeURIComponent(string); | ||
}; | ||
// 문자열에서 HTML 태그를 escape 합니다. | ||
@@ -880,2 +1590,26 @@ clean.string.escapeHtml = (function(){ | ||
})(); | ||
// 랜덤 문자열을 반환하는 함수입니다. | ||
clean.string.random = function(size) { | ||
//REQUIRED: size: 올매나 긴 문자열을 만들건지 ㅋ | ||
var | ||
// 너, 문자열. | ||
str = '', | ||
// 랜덤하게 생성 가능한 character 셋 | ||
possibleChars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', | ||
// index! | ||
i; | ||
// size까지 돌면서 | ||
for ( i = 0; i < size; i += 1) { | ||
// 문자열에서 랜덤하게 하나의 char을 끄집어 와 추가합니다! | ||
str += possibleChars.charAt(Math.floor(Math.random() * possibleChars.length)); | ||
} | ||
// 마지막으로 반! 환! | ||
return str; | ||
}; | ||
// 문자열에서 특정 문자열을 모두 제거한다! | ||
@@ -901,2 +1635,9 @@ clean.string.removeAll = function(target, search) { | ||
// 문자열을 거꾸로! | ||
clean.string.reverse = function(target) { | ||
//REQUIRED target | ||
return target.split('').reverse().join(''); | ||
} | ||
// 문자열에서 HTML 태그를 삭제합니다. | ||
@@ -932,2 +1673,12 @@ clean.string.stripTag = (function(){ | ||
// escape한 문자열 원래 문자열로 돌립니다!! | ||
// 특히나 한국어는 escpae가 많이많이 상당히 필요하죵ㅇㅇㅇ! | ||
clean.string.unescape = function(escape) { | ||
//REQUIRED: escape: escape 된 문자열 | ||
// decodeURIComponent를 이용합니다! | ||
// escape가 encodeURIComponent를 이용하였기 때문!! | ||
return decodeURIComponent(escape); | ||
}; | ||
// 어떤 대상을 배열로 변경 | ||
@@ -940,24 +1691,32 @@ clean.to.array = function(thing) { | ||
// 정수로 바꾼다! | ||
// 정수로 바꾼다! (32비트 이상도 처리) | ||
clean.to.integer = function(thing) { | ||
//REQUIRED: thing: 변경할 대상 | ||
/* | ||
js의 비트연산자는 기본적으로 32비트 signed int를 대상으로 합니다. | ||
피연산자가 다른 형식일 경우 자동으로 해당 형식으로 변환한 뒤 연산 | ||
을 시도하구요. 이 과정이 단순히 parseInt를 사용하는지는 모르겠는 | ||
데, "0xff"같은 문자열도 16진수로 변환해서 처리를 해주더라구요. 스 | ||
펙문서를 제가 못 찾은건지 그건 확인을 못 해봤지만, 어쨌든 그래서 | ||
비트연산의 대상이 되면 소수점같은거 없는 깔끔한 정수가 됩니다. | ||
또한, 반환값도 당연히 32비트 정수로 정해져 있기 때문에 null NaN | ||
undefined infinity 그런거 없이 무조건 0을 반환합니다. 예외도 발생 | ||
시키지 않구요. 이는 어떠한 값을 "반드시 정수일 것을 보장" 하기에 | ||
좋은 방법이라 은근히 많이 사용되는 잔스킬입니다. | ||
// 음.. 더 좋은 방법이 없을까요? | ||
return parseInt(thing, 10); | ||
}; | ||
같은 맥락에서 아래 것들도 같은 작용을 합니다. | ||
// 정수로 바꾼다! (32 bit!) | ||
clean.to.integer32 = function(thing) { | ||
//REQUIRED: thing: 변경할 대상 | ||
~~v // bitwise NOT | ||
v<<0 // bitwise shift | ||
*/ | ||
/* | ||
js의 비트연산자는 기본적으로 32비트 signed int를 대상으로 합니다. | ||
피연산자가 다른 형식일 경우 자동으로 해당 형식으로 변환한 뒤 연산 | ||
을 시도하구요. 이 과정이 단순히 parseInt를 사용하는지는 모르겠는 | ||
데, "0xff"같은 문자열도 16진수로 변환해서 처리를 해주더라구요. 스 | ||
펙문서를 제가 못 찾은건지 그건 확인을 못 해봤지만, 어쨌든 그래서 | ||
비트연산의 대상이 되면 소수점같은거 없는 깔끔한 정수가 됩니다. | ||
또한, 반환값도 당연히 32비트 정수로 정해져 있기 때문에 null NaN | ||
undefined infinity 그런거 없이 무조건 0을 반환합니다. 예외도 발생 | ||
시키지 않구요. 이는 어떠한 값을 "반드시 정수일 것을 보장" 하기에 | ||
좋은 방법이라 은근히 많이 사용되는 잔스킬입니다. | ||
같은 맥락에서 아래 것들도 같은 작용을 합니다. | ||
~~v // bitwise NOT | ||
v<<0 // bitwise shift | ||
*/ | ||
return thing | 0; | ||
@@ -964,0 +1723,0 @@ }; |
{ | ||
"name": "clean.js", | ||
"version": "0.0.1", | ||
"description": "깨끗하게 맑게 자신있게~! 누구나 읽기 쉬운 깔끔한 JavaScript!", | ||
"version": "0.0.2", | ||
"description": "누구나 참여하고 누구나 읽기 쉬운 소스코드를 작성한다! 오픈소스 JavaScript 라이브러리, clean.js!", | ||
"main": "clean.js", | ||
@@ -6,0 +6,0 @@ "repository": { |
![ScreenShot](https://raw.github.com/cleanjs/clean.js/master/logo.png) | ||
======== | ||
clean.js는 언제나 열려있습니다. 아무때나, 편하게 오셔서 커밋한번 하고 가세요~! | ||
___ __ ____ __ _ _ ____ ___ | ||
@@ -15,3 +17,13 @@ / __)( ) ( ___) /__\ ( \( ) (_ _)/ __) | ||
- @cleanjs.org 메일 주소 신청받아요~! 네이버 메일과 연동할 수 있어요! | ||
- 코드 공부하시다가 설명이 부족하다 싶은 부분은 이해하시는 대로 주석으로 남겨주세요! | ||
node.js | ||
------- | ||
npm install clean.js | ||
목표 | ||
---- | ||
<del>underscore.js( http://underscorejs.org )를 뛰어넘는 멋진 JavaScript 라이브러리!</del> | ||
목표 수정! 이번엔 jQuery? | ||
이것만은 지켜주세요! | ||
@@ -22,6 +34,7 @@ ---- | ||
- 부담없이 막 올려주세요! 주석이라도 좋으니 1일 1커밋을 해봅시다! | ||
- 주석은 백만줄이라도 좋으니 팍팍 달아주세요. 상세하게 설명할수록 좋아요. | ||
- 주석은 백만줄이라도 좋으니 팍팍 달아주세요. 한글로 상세하게 설명할수록 좋아요. | ||
- 내가 만족하는 코드가 아닌 다른 사람이 '보기 좋은' 코드를 작성해주세요! | ||
- 부담없이 커밋해 주세요! 작성하신 코드를 다른 사람들이 더 발전시켜 줄거에요! :) | ||
- 때에 따라서는 지워질수도 있어요! ;( | ||
- 기능들은 clean.{패키지 명}.{기능 명} 으로 작성해주세요~! | ||
- 기능 하나에 파일 하나! clean.is.good 이라는 기능은 is폴더 안에 good.js로 만들어주세요! | ||
@@ -43,3 +56,3 @@ - 모든 기능은 function으로 만들어주세요 순!수!함!수! :) | ||
원래 한분한분 아이디 작성해 놓았는데 넘 길어지는것 같아 숫자로 대신합니다!<br> | ||
현재 총 27분의 커미터가 계십니다! | ||
현재 총 29분(>=)의 커미터가 계십니다! | ||
@@ -51,2 +64,3 @@ 타임라인 | ||
- 2014-02-26: http://cleanjs.org 오픈 | ||
- 2014-02-27: npm package로 등록 (https://www.npmjs.org/package/clean.js) | ||
@@ -53,0 +67,0 @@ 라이센스 |
// 배열의 요소를 각각 처리한다! | ||
clean.array.each = function(array, callback) { | ||
//REQUIRED: array | ||
//REQUIRED: callback(elem, index of elem){...} | ||
// REQUIRED: array | ||
// REQUIRED: callback(elem, index of elem){...} | ||
@@ -6,0 +6,0 @@ var |
// 배열에서 값들 찾아갖고 배열로 반환! | ||
clean.array.filter = function(array, check) { | ||
//REQUIRED: array | ||
//REQUIRED: check | ||
// REQUIRED: array | ||
// REQUIRED: check | ||
@@ -6,0 +6,0 @@ var |
// 배열에서 값 찾기 | ||
clean.array.find = function(array, check) { | ||
//REQUIRED: array | ||
//REQUIRED: check | ||
// REQUIRED: array | ||
// REQUIRED: check | ||
@@ -6,0 +6,0 @@ var |
// 배열에서 최대 값 찾기 | ||
clean.array.max = function(array) { | ||
//REQUIRED: array | ||
// REQUIRED: array | ||
@@ -5,0 +5,0 @@ var |
// 배열에서 최소 값 찾기 | ||
clean.array.min = function(array) { | ||
//REQUIRED: array | ||
// REQUIRED: array | ||
@@ -5,0 +5,0 @@ var |
// 지금이 언제냐? | ||
clean.date.now = function() { | ||
// 지금은 지금이다! | ||
// 롸잇! 나우! | ||
return new Date(); | ||
}; |
@@ -17,7 +17,7 @@ #자네 DATE공간에 온걸 환영하네. | ||
##getTimeStamp | ||
##timeStamp | ||
이 것은 자네가 만약 디버깅을 할경우나 `년년년년-월월-일일 시시:분분:초초` 형식으로 날짜와 시간을 보고싶다면 아래의 코드를 이용하면 된다네. | ||
``` | ||
//코드 | ||
console.log(clean.date.getTimeStamp()); | ||
console.log(clean.date.timeStamp()); | ||
@@ -28,2 +28,2 @@ //결과 | ||
자네도 괜찮다면 같이 참여하지 않겠는가? | ||
자네도 괜찮다면 같이 참여하지 않겠는가? |
돔을 처리하자. | ||
==== | ||
![ScreenShot](https://raw.github.com/cleanjs/clean.js/master/source/dom/dom.jpg) | ||
![ScreenShot](https://raw.github.com/cleanjs/clean.js/master/source/dom/dom.jpg) |
// 디바이스 정보를 가져옵니다. | ||
clean.info.device = function(target) { | ||
//TODO: | ||
}; | ||
clean.info.device = (function(){ | ||
var agent = navigator.userAgent; | ||
var isIOS = agent.match(/(iPad|iPhone|iPod)/g) ? true : false; | ||
var ios = (function(){ | ||
if(isIOS){ | ||
var startPoint = agent.indexOf('OS '); | ||
if((agent.indexOf('iPhone') > -1 || agent.indexOf('iPad') > -1) && startPoint > -1){ | ||
return 1 * (agent.substr(startPoint + 3, 3).replace('_', '.')); | ||
} | ||
}else{ | ||
return false; | ||
} | ||
})(); | ||
// device.isIOS : IOS면 true 아니면 false | ||
// device.ios : ios7일 경우 7, ios6.1일 경우 6.1을 리턴, 아니면 false | ||
// 개인적으로는 html에 ios ios-7 클래스 등을 덧붙이도록 만들어서 사용하고 있습니다. | ||
return { | ||
isIOS : isIOS, | ||
ios : ios | ||
} | ||
})(); |
@@ -8,6 +8,8 @@ // 문자열인가? | ||
// IE에서 toString에 접근하기 위해서는 Object.prototype.toString으로 접근해야합니다. | ||
// 브라우져에 상관없이 쓸 수 있는 typeof을 쓰는 건 어떨가요? | ||
// typeof (new String('abc')) === "object"라는 tipjs님의 말씀에 따라 instanceof 검사로직을 추가합니다. | ||
return typeof target === 'string' || target instanceof String; | ||
// IE에서 toString에 접근하기 위해서는 Object.prototype.toString으로 접근해야합니다. | ||
// 브라우져에 상관없이 쓸 수 있는 typeof을 쓰는 건 어떨가요? | ||
// typeof (new String('abc')) === "object"라는 tipjs님의 말씀에 따라 instanceof 검사로직을 추가합니다. | ||
return typeof target === 'string' || target instanceof String; | ||
//COMMENT: 매우 만족합니당! | ||
}; |
@@ -17,5 +17,8 @@ // 객체의 프로퍼티를 각각 처리한다! | ||
// 프로퍼티의 값과 키를 callback으로 쏴줘요! | ||
callback(object[key], key); | ||
// 만약 callback의 결과값이 false면 더이상 살펴보지 않고 중단! | ||
if (callback(object[key], key) === false) { | ||
break; | ||
} | ||
} | ||
} | ||
}; |
@@ -11,2 +11,3 @@ // object의 키들을 배열로 반환하는 함수 | ||
clean.object.each(object, function(value, key) { | ||
// 키들을 배열에 넣습니다. | ||
@@ -13,0 +14,0 @@ keys.push(key); |
@@ -11,2 +11,3 @@ // object의 값들을 배열로 반환하는 함수 | ||
clean.object.each(object, function(value) { | ||
// 키들을 배열에 넣습니다. | ||
@@ -13,0 +14,0 @@ values.push(value); |
@@ -14,6 +14,9 @@ // 요기는 패키지 정보를 담고있어요. | ||
// 데이터 처리 | ||
object : {}, | ||
function : {}, | ||
array : {}, | ||
object : {}, | ||
date : {}, | ||
string : {}, | ||
integer : {}, | ||
bool : {}, | ||
@@ -24,3 +27,3 @@ // helpers | ||
valid : {}, | ||
random : {}, | ||
helper : {}, | ||
@@ -32,3 +35,6 @@ // 브라우저 전용 패키지들 | ||
// 모듈 | ||
module : {} | ||
module : {}, | ||
// 다국어 지원 (i18n) | ||
korean : {} | ||
}; | ||
@@ -35,0 +41,0 @@ |
@@ -1,34 +0,324 @@ | ||
<<<<<<< HEAD | ||
쏘스 | ||
=== | ||
- 보기좋은 소스가 쓰기도 좋다. | ||
- 왼손이 코딩한걸 오른손이 모르게 하라 | ||
- 엔터는 거들뿐 | ||
======= | ||
쏘쓰 | ||
==== | ||
보기좋은 소스가 쓰기도 좋다. | ||
#Cleanjs function list? | ||
패키지 | ||
---- | ||
패키지들입니다. | ||
Cleanjs 에서 사용되는 함수들 입니당! | ||
- info | ||
[TOC] | ||
데이터 처리 | ||
- array | ||
- object | ||
- date | ||
- string | ||
##String's | ||
helpers | ||
- is | ||
- to | ||
- valid | ||
- random | ||
### contains | ||
문자열에 해당문자가 포함되어 있는지 확인합니다. | ||
브라우저 처리 | ||
- dom | ||
**Paramaters** | ||
![ScreenShot](https://raw.github.com/cleanjs/clean.js/master/source/source.jpg) | ||
>>>>>>> FETCH_HEAD | ||
1. targetString - String | ||
2. searchString - String | ||
**Return** | ||
`boolean` | ||
**Uasge** | ||
``` | ||
var targetString = "암~ 쏘핫 난 너무 멋져~"; | ||
var searchString = "너무"; | ||
var result = clean.string.contains(targetString, searchString); | ||
console.log(result); | ||
``` | ||
**Result** | ||
`true` or `false` | ||
--- | ||
### escapeHtml | ||
문자열에서 HTML 태그를 escape 합니다 | ||
`escape` => 영어사전적의미는 달아나다, 탈풀하다 또는 나쁜상황에서 벗어나다, 불쾌하거나 위험한것을 피하다 인데 프로그래밍적으로 뭐라해야하나요;;; | ||
**Paramaters** | ||
1. tag - String | ||
**Return** | ||
`String` | ||
**Uasge** | ||
``` | ||
var tag = "<a href='http://naver.com'>링크 태그예유~</a>"; | ||
var result = clean.string.escapeHtml(tag); | ||
console.log('바꾸기 전 =>' + tag); | ||
``` | ||
**Result** | ||
Before | ||
<a href='http://naver.com'>링크 태그예유~</a> | ||
After | ||
<a href='http://naver.com'>링크 태그예유~</a> | ||
--- | ||
### removeAll | ||
문자열에서 특정 문자열을 모두 제거한다. | ||
**Paramaters** | ||
1. targetString - String | ||
2. removeString - String | ||
**Return** | ||
`String` | ||
**Uasge** | ||
``` | ||
var targetString = '아싸라비야 콜롬비야 뿌악뿌악'; | ||
var removeString = '뿌악뿌악'; | ||
var result = clean.string.removeAll(targetString, removeString); | ||
console.log('삭제후 결과 => ' + result); | ||
``` | ||
**Result** | ||
Before | ||
아싸라비야 콜롬비야 뿌악뿌악 | ||
After | ||
아싸라비야 콜롬비야 | ||
--- | ||
### replaceAll | ||
문자열에서 특정 문자열을 모두 변경한다! | ||
**Paramaters** | ||
1. targetString - String | ||
2. searchString - String | ||
3. replaceString - String | ||
**Return** | ||
`String` | ||
**Uasge** | ||
``` | ||
var targetString = "가나 초콜릿 가나다 가가가나나나"; | ||
var searchString = "나"; | ||
var replaceString = "바"; | ||
var result = clean.string.replaceAll(targetString, searchString, replaceString); | ||
console.log('결과 => ' + result); | ||
``` | ||
**Result** | ||
Before | ||
가나 초콜릿 가나다 가가가나나나 | ||
After | ||
가바 초콜릿 가바다 가가가바바바 | ||
--- | ||
### stripTag | ||
문자열에서 HTML 태그를 삭제합니다. | ||
**Paramaters** | ||
1. tag - String | ||
**Return** | ||
`String` | ||
**Uasge** | ||
``` | ||
var tag = "<a href='http://naver.com'>링크 태그예유~</a>"; | ||
var result = clean.string.stripTag(tag); | ||
console.log('삭제 후 =>' + result); | ||
``` | ||
**Result** | ||
Before | ||
<a href='http://naver.com'>링크 태그예유~</a> | ||
After | ||
링크 태그예유~ | ||
--- | ||
### trim | ||
문자열의 앞뒤 공백을 제거합니다 | ||
**Paramaters** | ||
1. targetString - String | ||
**Return** | ||
`String` | ||
**Uasge** | ||
``` | ||
var targetString = " 아싸라비야 콜롬비야 삐약삐약 "; | ||
var result = clean.string.trim(targetString); | ||
console.log('변경후 문자열 => ' + result); | ||
``` | ||
**Result** | ||
Before | ||
아싸라비야 콜롬비야 삐약삐약 | ||
After | ||
아싸라비야 콜롬비야 삐약삐약 | ||
Comment | ||
결과화면엔 별다른 차이점이없지만 문자열의 앞뒤 공백이 제거되었음을 알립니다. | ||
--- | ||
### hyphenOnPhoneNum | ||
숫자로만 이루어진 전화번호에 하이픈( - ) 을 넣어서 반환한다. | ||
**Paramaters** | ||
1. targetNumber - String or Interger | ||
**Return** | ||
`String` | ||
**Uasge** | ||
``` | ||
var targetNumber = "01012341234"; | ||
var result = clean.string.hyphenOnPhoneNum(targetNumber); | ||
console.log('하이픈 넣은후 => ' + result) | ||
``` | ||
**Result** | ||
Before | ||
01012341234 | ||
After | ||
010-1234-1234 | ||
--- | ||
### random | ||
알파벳을 지정한 수 만큼 무작위로 반환 합니다. | ||
**Paramaters** | ||
1. Number - Interger | ||
**Return** | ||
`String` | ||
**Uasge** | ||
``` | ||
var randomLength = 15; | ||
var randomString = clean.string.random(randomLength); | ||
console.log('랜덤 문자열 =>' + randomString); | ||
``` | ||
**Result** | ||
tGASq7LwUj6I591 | ||
Comment | ||
랜덤문자열은 항상 다른값으로 출력됩니다. | ||
--- | ||
### between | ||
문자열 사이의 값을 출력합니다. | ||
**Paramaters** | ||
1. target - String | ||
2. start - Interger | ||
3. end - Interger | ||
**Return** | ||
`String` | ||
**Uasge** | ||
``` | ||
var targetString = "안녕하세요 저는 Cleanjs에 도움말 입니다." | ||
var start = 14; | ||
var end = 21; | ||
var betweenString = clean.string.between(targetString, start, end); | ||
console.log('문자열 뽑기 =>' + randomString); | ||
``` | ||
**Result** | ||
Cleanjs | ||
--- | ||
### Function | ||
**Paramaters** | ||
**Return** | ||
**Uasge** | ||
**Result** | ||
--- |
@@ -7,3 +7,3 @@ // 문자열에서 해당문자가 포함되었는지 확인합니다 | ||
// search를 찾아가지고 인덱스를 확인합니다! | ||
return target.indexOf(search) >= 0; | ||
}; | ||
return target.indexOf(search) != -1; | ||
}; |
@@ -117,2 +117,13 @@ #String에 찾아온걸 환영하네. | ||
##random | ||
랜덤 문자열을 반환하는 함수입니다. | ||
``` | ||
//코드 | ||
var randomString = clean.string.random(15); | ||
console.log('랜덤 문자열 =>' + randomString); | ||
//결과 | ||
랜덤 문자열 => tGASq7LwUj6I591 | ||
``` | ||
계속 추가중입니다! 이상한 부분있음 수정해주세요! |
@@ -1,24 +0,7 @@ | ||
// 정수로 바꾼다! | ||
// 정수로 바꾼다! (32비트 이상도 처리) | ||
clean.to.integer = function(thing) { | ||
//REQUIRED: thing: 변경할 대상 | ||
/* | ||
js의 비트연산자는 기본적으로 32비트 signed int를 대상으로 합니다. | ||
피연산자가 다른 형식일 경우 자동으로 해당 형식으로 변환한 뒤 연산 | ||
을 시도하구요. 이 과정이 단순히 parseInt를 사용하는지는 모르겠는 | ||
데, "0xff"같은 문자열도 16진수로 변환해서 처리를 해주더라구요. 스 | ||
펙문서를 제가 못 찾은건지 그건 확인을 못 해봤지만, 어쨌든 그래서 | ||
비트연산의 대상이 되면 소수점같은거 없는 깔끔한 정수가 됩니다. | ||
또한, 반환값도 당연히 32비트 정수로 정해져 있기 때문에 null NaN | ||
undefined infinity 그런거 없이 무조건 0을 반환합니다. 예외도 발생 | ||
시키지 않구요. 이는 어떠한 값을 "반드시 정수일 것을 보장" 하기에 | ||
좋은 방법이라 은근히 많이 사용되는 잔스킬입니다. | ||
같은 맥락에서 아래 것들도 같은 작용을 합니다. | ||
~~v // bitwise NOT | ||
v<<0 // bitwise shift | ||
*/ | ||
return thing | 0; | ||
// 음.. 더 좋은 방법이 없을까요? | ||
return parseInt(thing, 10); | ||
}; |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
239592
107
2922
71