Javascript 如何隔离/使用字符串中重复实例的每个索引值

Javascript 如何隔离/使用字符串中重复实例的每个索引值,javascript,arrays,loops,indexof,Javascript,Arrays,Loops,Indexof,我正在编写一个函数,它应该接受一个字符串值,将其解释为一个以某个基数(十进制、十六进制、八进制、二进制等)表示的数字,并计算其实际(十进制)值。下面是代码,下面是我正在努力解决的问题: const Alphabet = { BINARY: '01', OCTAL: '01234567', DECIMAL: '0123456789', HEXA_DECIMAL: '0123456789abcdef', ALPHA_LOWER: '

我正在编写一个函数,它应该接受一个字符串值,将其解释为一个以某个基数(十进制、十六进制、八进制、二进制等)表示的数字,并计算其实际(十进制)值。下面是代码,下面是我正在努力解决的问题:

const Alphabet = {
  BINARY:        '01',
  OCTAL:         '01234567',
  DECIMAL:       '0123456789',
  HEXA_DECIMAL:  '0123456789abcdef',
  ALPHA_LOWER:   'abcdefghijklmnopqrstuvwxyz',
  ALPHA_UPPER:   'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
  ALPHA:         'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
  ALPHA_NUMERIC: '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
}

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'
)和数字的基数(我们将使用
十六进制
)。十六进制数的10进制等价物
'abc'
将是
2748
:而不是预期的:
162(15)+161(15)+160(15)=3840+240+15=4095

162(10) + 161(11) + 160(12) = 2560 + 176 + 12 = 2748
162(15) + 161(15) + 160(15) = 3840 + 240 + 15 = 4095
我意识到问题的根源:变量
digits.indexOf(digit)
被捕获,因为
.indexOf()
只返回第一个实例的索引。现在我一直在琢磨如何获得正确的索引号,这将计算正确的指数并使函数按预期工作。

实际上
。map()
将索引传递给回调函数

var new_array = arr.map(function callback(currentValue, index, array) {
    // Return element for new_array
}[, thisArg])
因此,如果您像下面这样修改代码,它应该可以工作

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