如何将数字拆分为n个数字的组

时间:2015-11-18 23:09:51

标签: javascript

我需要将数字拆分成数字组,然后将这些数字放入数组中。然后,我将使用这些数字进行一些简单的数学运算,然后将它们插入到文本框中。

到目前为止,我只找到了如何将数字拆分为单个数字,如下所示:

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

4 个答案:

答案 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"]

您可以更改要分组的数字位数,只需将3替换为\d{3}内所需的数量。您也可以从变量中获取此值,在这种情况下,您必须使用RegExp constructor来构建正则表达式实例。

修改 要将output再次转换为数字,您可以使用array's map method,如下所示:

var numbers = output.map(Number);

希望它有所帮助。

答案 1 :(得分:3)

这样做的一种相当简洁的方法是使用正则表达式。例如,要将数字拆分为最多3位数的组,您可以使用以下内容:

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

返回以下数组:

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

要拆分为 N 数字,您可以改为使用RegExp构造函数:

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

然后result将是:

[ "1235", "4987" ]

result的值更改为数字的简单方法是使用mapNumber(在非构造函数上下文中执行类型转换):< / p>

var numbers = result.map(Number);

然后numbers将是:

[ 1235, 4987 ]

答案 2 :(得分: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

答案 3 :(得分:0)

虽然使用Regexp可能有一种更简单的方法,但您可以尝试这样做:

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;
}