0
문자열 값을 사용하여 일부 기본 (10 진수, 16 진수, 8 진수, 2 진수 등)으로 해석해야하는 함수를 작성하고 있습니다. .) 실제 값 (십진수)을 계산하십시오. 여기에 내가 고민하고있어 문제가 될 것입니다 아래의 코드, 그리고 :문자열에서 반복 인스턴스의 각 인덱스 값을 분리/사용하는 방법
const Alphabet = {
BINARY: '01',
OCTAL: '',
DECIMAL: '',
HEXA_DECIMAL: 'abcdef',
ALPHA_LOWER: 'abcdefghijklmnopqrstuvwxyz',
ALPHA_UPPER: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
ALPHA: 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
ALPHA_NUMERIC: 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
}
function getValue(num, fromBase) {
const fblen = fromBase.length;
const digits = num.toString().split('');
const digitAmt = digits.map(function(digit) {
return fromBase.indexOf(digit) * (fblen**((digits.length - 1) - digits.indexOf(digit)));
});
return digitAmt.reduce(function(n, m) {
return n + m;
});
}
console.log(getValue('fff', Alphabet.HEXA_DECIMAL))
그래서 일이 무엇을 의미하는지 내가 통과하는 num
('abc'
, 예를 들면), 및 수의 기본 (우리가 ' 사용할 HEXA_DECIMAL
). 16 진수 'abc'
의 기본 10 등가는 2748
:
162(10) + 161(11) + 160(12) = 2560 + 176 + 12 = 2748
이 될 것이고, 그것이 함수에서 생성 할 것입니다. 그러나, 내가
'fff'
를 입력하면, 나는 걸림돌을 때렸다. 내가 얻을 :
162(15) + 162(15) + 162(15) = 3840 + 3840 + 3840 = 11520
보다는 예상 :
.indexOf()
는 첫 번째 인스턴스의 인덱스를 반환하기 때문에 잡힐 변수
digits.indexOf(digit)
: 문제는 어디에서 오는 깨달았
162(15) + 161(15) + 160(15) = 3840 + 240 + 15 = 4095
. 이제 올바른 지수를 계산하는 방법을 알아 냈습니다. 올바른 지수를 계산하고 함수를 의도 한대로 작동하게 만듭니다.
, 감사 작동합니다 인덱스가
콜백에 전달합니다! – Matt