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

标签 javascript arrays loops indexof

我正在编写一个函数,该函数应该接受一个字符串值,将其解释为某种基数(十进制,十六进制,八进制,二进制等)中的数字,并计算其实际(十进制)值。这是代码,下面是我遇到的问题:

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')和数字的基数(我们将使用 >HEXA_DECIMAL)。十六进制数 'abc' 的以 10 为基数的等价形式为 2748:

16<sup>2</sup>(10) + 16<sup>1</sup>(11) + 16<sup>0</sup>(12) = 2560 + 176 + 12 = 2748
,果然,这就是该函数将生成的结果。但是,如果我输入 'fff',我就会遇到麻烦。我得到:
16<sup>2</sup>(15) + 16<sup>2</sup>(15) + 16<sup>2</sup>(15) = 3840 + 3840 + 3840 = 11520
而不是预期的:
16<sup>2</sup>(15) + 16<sup>1</sup>(15) + 16<sup>0</sup>(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));
  });

关于javascript - 如何隔离/使用字符串中重复实例的每个索引值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46480830/

相关文章:

c - 读写矩阵

javascript - 迭代一个数组并在第一个数组的下一次迭代之前连接另一个数组的所有值?

javascript - 在浏览器中启用/禁用同时音轨

php - 从数据库中连续流式传输随机音频

java - 将对象插入到 jsonarray 中的特定位置

ios - 如何从任意数组中的枚举获取原始值

javascript - 使用现有数组的唯一连接值从现有数组创建新数组

javascript - AngularJS - 使用 'true' 属性过滤数据

javascript - 在 Jquery 中,需要从 CSS 中获取数字值而不是固定数字

Python - 如何使用 xml.etree.ElementTree 迭代每个 xml 节点返回列表?