2017-09-29 1 views
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

. 이제 올바른 지수를 계산하는 방법을 알아 냈습니다. 올바른 지수를 계산하고 함수를 의도 한대로 작동하게 만듭니다.

답변

1

사실 .map()는 아래와 같은 코드를 수정한다면, 그것은 속임수를 썼는지

const digitAmt = digits.map(function(digit, index) { 
    return fromBase.indexOf(digit) * (fblen ** ((digits.length - 1) - index)); 
    }); 
+0

, 감사 작동합니다 인덱스가

var new_array = arr.map(function callback(currentValue, index, array) { // Return element for new_array }[, thisArg]) 

콜백에 전달합니다! – Matt