将数字数组转换为数字

时间:2017-04-05 12:16:19

标签: javascript arrays reduce parseint

给出以下字符串数组:

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

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

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

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

3 个答案:

答案 0 :(得分:0)

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))

答案 1 :(得分:-1)

查看任意精度的整数算术包,例如Big NumbersBigCrunch。他们应该给你一些如何推销自己的想法。

答案 2 :(得分:-3)

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'));