Один из способов сделать это может быть:
public static function fromBase60(value:String):Number {
var result:Number = 0;
var targetBase:uint = 60;
var digitValue:int = 0;
for(var i:int = 0, j:int = value.length - 1; j >= 0; i++,j--) {
digitValue = reverseMap[value.charAt(j)];
result += Math.pow(targetBase,i) * digitValue;
}
return result;
}
Похоже, у вас есть массив, который отображает числа (цифры) в символы, чтобы вы могли построить обратную карту заранее и упростить поиск. С таким кодом:
// add this code to your class
private static var reverseMap:Object = {};
private static function buildReverseMap():void {
var len:int = baseChars.length;
for(var i:int = 0; i < len; i++) {
reverseMap[baseChars[i]] = i;
}
}
// initialize the reverse map
{
buildReverseMap();
}
Редактировать
Альтернативная реализация, основанная на алгоритме, опубликованном Томом Сиргедасом. Это позволяет избежать вызова Math.pow, хотя я сомневаюсь, что вы заметите большую разницу в практике (с точки зрения производительности):
public static function fromBase60(value:String):Number {
var result:Number = 0;
var targetBase:uint = 60;
var digitValue:int = 0;
var len:int = value.length;
for(var i:int = 0; i < len; i++) {
digitValue = reverseMap[value.charAt(i)];
result = result * targetBase + digitValue;
}
return result;
}