2015-11-18 91 views
1

我需要将一个数字拆分为几组数字,然后将这些数字放入数组中。然后,我将对这些数字做一些简单的数学计算,然后将它们插入到文本框中。如何将一个数字拆分为n个数字的组

到目前为止,我只找到如何分割,如下图所示一批到各位数:

var number = 12354987, 
output = [], 
sNumber = number.toString(); 

for (var i = 0, len = sNumber.length; i < len; i += 1) { 
output.push(+sNumber.charAt(i)); 
} 

console.log(output); 
+0

将其转换为字符串,然后将其拆分为子字符串,这就是全部。 – skypjack

回答

0

现在,你有output与个别数字,你可以使用另一个阵列将其分割成块n尺寸,像这样:

var n = // your number n; 
var final = []; 
for(var i = 0; i < output.length/n; i++) { 
    final[i] = []; 
    for(var j = 0; j < n; j++) { 
     final[i].push(output[(n*i)+j]); 
    } 
} 

此输出大小n的数组的数组。

如果n = 2它阵列(存储在final)输出:

[ 
    [1, 2], 
    [3, 5], 
    [4, 9], 
    [8, 7] 
] 

参见工作实施例on JSFiddle.net

0

虽然有可能做到这一点使用正则表达式一个简单的方法,你可以试试这个:

var splitNumber = function (number, digits) { 
    var numString = number.toString(); 
    var numArray = []; 

    for (var i = 0; i < numString.length; i+=digits) { 
     numArray.push(numString.substring(i, i+digits)); 
    } 

    for (var i = 0; i < numArray.length; i++) { 
     numArray[i] = Number(numArray[i]); 
    } 
    return numArray; 
} 
3

这样做的一个相当简洁的方式是使用正则表达式。例如,分裂数成多达3位基团,可以使用以下:

number.toString().match(/\d{1,3}/g) 

这将返回以下的数组:

[ "123", "549", "87" ] 

分裂成Ñ位数,您可以使用RegExp构造来代替:

var numDigits = 4; 
var re = new RegExp("\\d{1," + numDigits + "}", "g"); 
var result = number.toString().match(re); 

然后result是:

[ "1235", "4987" ] 

一种简单的方法来改变的result回数字的值将是使用map,与Number(其执行在非构造上下文类型转换):

var numbers = result.map(Number); 

然后numbers将是:

[ 1235, 4987 ] 
+0

你知道如何实现这个:''12354987'' - ['12','354','987']'? – Nikita

+0

已经在下面使用了ZER0答案。 – Nikita

+0

是的,你可以使用更复杂的正则表达式来解决这个问题。否则,从字符串的末尾开始,实现使用循环和字符串切片将会非常简单。 –

4

你可以使用正则表达式来获得你想要的结果。

如果你想按左边开始,正则表达式是相当简单:

// assuming you want to group every 3 digits 
var number = 12354987, 
    output = number.toString().match(/\d{1,3}/g); 

// output: ["123", "549", "87"] 

相反,如果你想通过右侧,例如启动像货币格式,正则表达式需要更加善于表达:

var number = 12354987, 
    output = number.toString().match(/(\d+?)(?=(\d{3})+(?!\d)|$)/g); 

// output: ["12", "354", "987"] 

你可以改变你想简单地集团内部\d{3}与所需的量置换3位的数量。你也可以从变量中获得这样的值,在这种情况下,你必须使用RegExp constructor来构建你的正则表达式实例。

编辑: 要转换output为数字你可以再次使用array's map method如下:

var numbers = output.map(Number); 

希望它能帮助。

相关问题