본문 바로가기
IT 개발

버전비교 스크립트 (javascript)

by 로보찌빠냥 2020. 6. 29.
반응형

안드로이드나 iOS 앱에서 보통 버전은 

0.0.0(Major.Minor.Patch) 형식 또는 0.0(Major.Minor) 형식을 사용합니다. 위와 같은 형식의 버전을 비교하는 방법에 대해 알아봅니다. 

예를 들면 2.9 에서 2.10 으로 업데이트가 되면서 앱에서 추가된 기능으로 2.10 이상의 버전에서만 동작하는 스크립트를 만든다고 생각해 봅니다.

 

2.9 < 2.10 맞지만 문자열로 비교를 하면 

 

w3school에서 테스트

위와 같은 반대의 결과가 됩니다.

그렇다면 어떻게 해야 할까요? ‘.’ 기준으로 split 후에 각각 비교하는 로직을 만들면 됩니다.

 

<!DOCTYPE html>
<html>
<body>

<button onclick="myFunction()">Try it</button>

<script>
function myFunction() {
	// 서버버전이 높으면 업데이트
    var a = '6.8';		// 서버 버전
    var b = '6.7.99';	// 현재 앱 버전
    
	if(compareVersion(a, b) ){
    	alert('b 가 크거나 같다');
        // 정상 앱
    }else{
    	alert('b 가 작다');
        // 업데이트
    }
}
// verA 서버 버전
// verB 현재 앱 버전
// verB 가 verA보다 큰거나 같은지를 확인합니다.
// verB > verA이면 true, verB < verA false
// 리턴값이 false 일때 업데이트를 진행하면 됩니다.
function compareVersion(verA, verB){

	var result = true;
	verA = verA.split( '.' ); // .을 기준으로 문자열 배열로 만든다 [6][8]
	verB = verB.split( '.' ); // .을 기준으로 문자열 배열로 만든다 [6][7][99]

	const length = Math.max( verA.length, verB.length ); // 배열이 긴쪽의 length를 구함
	
	for ( var i = 0;  i < length ; i ++ ){
		var a = verA[i] ? parseInt(verA[i], 10 ) : 0; // 10진수의 int로 변환할 값이 없을 때 0으로 값을 넣습니다.
		var b = verB[i] ? parseInt(verB[i], 10 ) : 0;
        // alert( a +' > ' + b + ' : ' + ( a > b ) );
		if ( a > b ) {
			result = false;
			break;
		}
	}
	return result;
}

</script>

</body>
</html>

 

 

감사합니다.

반응형

댓글