我怎样才能将数字分解成它们的数字值?

How can I break numbers into their digit values?

作为罗马数字转换器算法的一部分,我想将给定的数字分解成它们的数字值。我真正想做的是:

1984 = 1000+900+80+4

最好让你知道我将在哪里使用结果。我会将结果放入一个数组中并与对应的罗马数字匹配,例如1000 = M,900 = CM,80 = LXXX,4 = IV。

1984 = MCMLXXXIV

需要什么样的函数才能产生预期的输出?

这里有两个小算法可以做到这一点:

function separate(number) {
  const length = number.toString().length;
  const result = [0];
  let step = 1;

  for (let i= 0; i< length; i++) {
    step *= 10;
    let part = number % step;

    result.forEach(previous => {
      part -= previous;
     });

    result[i] = part;
  }

  return result;
}

function separate(number) {
  const str = number.toString();
  const result = [];

  for (var i = 0; i < str.length; i++) {
    result[i] = str.charAt(i) * Math.pow(10, i);
  }

  return result;  
}

它returns一个数组,其中每个数字都是分开的

我把它调整成了这个单行:

Array.from((1984).toString()).reverse().map((d, i) => d * 10 ** i)

这会给你相反的部分(最低有效数字在前);根据您的需要,您可能想在最后添加另一个 .reverse()