将数字数组转换为数字

Converting array of digits to a number

给定以下字符串数组:

["9", "3", "3", "3", "8", "5", "2", "7", "0", "2", "2", "2", "7", "9", "8", "7"]

我写了这个 reduce 代码,试图将数组转换为数字(不使用任何内置解析器)。

d.reduce((res,n,idx)=>{
   res *= 10;
   res += n.charCodeAt(0) - 48;
   console.log(res);
   return res;
},0);

这是日志:

9
93
933
9333
93338
933385
9333852
93338527
933385270
9333852702
93338527022
933385270222
9333852702227
93338527022279
933385270222798
9333852702227988

933385270222798(8) <-- 应该是 7

我注意到 9333852702227980 + 7 = 9333852702227988

当数字很大时,代码就会消失,我猜我超出了安全整数范围。我该如何解决这个问题?

var arr = ["9", "3", "3", "3", "8", "5", "2", "7", "0", "2", "2", "2", "7", "9", "8", "7"];
var num = 0;

for (a = arr.length - 1; a >= 0; a--) {
  num += arr[a] * Math.pow(10, (arr.length - 1) - a);
}

Number.prototype.add = function(x) {
  var out = 0;
  for (a = arr.length - 1; a >= 0; a--) {
    out += (arr[a] * 1 + (x[(arr.length - 1) - a] || 0) * 1) * Math.pow(10, (arr.length - 1) - a);
  }
  return out;
}

console.log(num);
console.log(num.add('7'));

查看任意精度整数运算包,例如 Big Numbers, Big, or Crunch。他们应该会给你一些关于如何推出自己的想法。

function convertArrayToNumber(arr) {
    let result = ""
    for (el of arr) {
        result += el
    }
    return result
}

let yourArray = ["9", "3", "3", "3", "8", "5", "2", "7", "0", "2", "2", "2", "7", "9", "8", "7"]
Number(convertArrayToNumber(yourArray))

首先转换为字符串,然后使用replaceAll函数替换结果字符串上的逗号:

const arr = ["9", "3", "3", "3", "8", "5", "2", "7", "0", "2", "2", "2", "7", "9", "8", "7"]
const no = (arr.toString()).replaceAll(',','');
console.log("result: ", no)