如何将字符串数组拆分为单个整数的2D数组

时间:2016-08-04 00:07:48

标签: javascript arrays for-loop multidimensional-array split

我正在做一个非常初学者,自学成才(迄今为止)的编程学生。我获得了一系列信用卡号码:

var myArray = ['4916-2600-1804-0530', '4779-252888-3972', '4252-278893-  7978', '4556-4242-9283-2260'];

我要删除短划线,获取每个信用卡号的各个整数的总和,并返回最高金额。

我已正确删除破折号:

var myArray = ['4916-2600-1804-0530', '4779-252888-3972', '4252-278893-7978', '4556-4242-9283-2260'];

var noDashes = myArray.map(function(x){ return x.replace(/-/g,"") });

console.log(noDashes);

接下来,我将每个字符串转换为整数:

var strToInt = noDashes.map(function (x) { 
    return parseInt(x, 10); 

});

console.log(strToInt);

但现在我无法弄清楚如何迭代数组并将每个长整数转换为2D数组中的单个整数,如下所示:

var newArray = [[4,9,1,6,2,6,0,0,1,8,0,4,0,5,3,0], [4,7,7,9,2,5,2,8,8,8,3,9,7,2], [4,2,5,2,2,7,8,8,9,3,7,9,7,8], [4,5,5,6,4,2,4,2,9,2,8,3,2,2,6,0]];

我知道我需要使用for循环和可能的.split方法,但是我已经尝试了两天,进行了一百万次不同的搜索,但仍然没有找到任何有用的东西。我已经在网上找到了这个练习的完整答案,但是它使用的代码方式对我的理解来说太高级了,所以我一直试图将问题分解成我能理解的块。

我会很感激一些指导!谢谢!

2 个答案:

答案 0 :(得分:0)

var myArray = [
  '4916-2600-1804-0530',
  '4779-252888-3972',
  '4252-278893-7978',
  '4556-4242-9283-2260'
];

var sums = myArray.map(function (ccValue) {
  return ccValue.replace(/[^0-9]/g, '').split('');
})
.reduce(function (a, b) {
  return a + b;
});

var largest = Math.max.apply(Math, sums);

console.log(largest);

答案 1 :(得分:0)

要获得总和reduce

oneArray.reduce(function(a,b) { return a+b })

要将其应用于每个,请使用map

newArray.map(function(x) { return x.reduce(function(a,b) { return a+b }) })

要获得最大总和,请使用Math.max:

Math.max.apply(null, newArray.map(function(x) { return x.reduce(function(a,b) { return a+b }) }))

为您额外锻炼:是哪个卡号?