如何将一个数字分成n位数的组

how to split a number into groups of n digits

本文关键字:数字 一个      更新时间:2023-09-26

我需要将一个数字拆分为数字组,然后将这些数字放入一个数组中。然后我会用这些数字做一些简单的数学运算,然后把它们插入到一个文本框中。

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

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

您可以使用正则表达式来获得所需的结果。

如果你想从左开始分组,正则表达式很简单:

// 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构造函数来构建RegExp实例。

编辑:要再次将output转换为数字,您可以使用阵列的映射方法,如下所示:

var numbers = output.map(Number);

希望能有所帮助。

一种相当简洁的方法是使用正则表达式。例如,要将数字拆分为最多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(在非构造函数上下文中执行类型转换):

var numbers = result.map(Number);

那么numbers将是:

[ 1235, 4987 ]

虽然使用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;
}

现在您有了带有单个数字的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]
]

请参阅JSFiddle.net上的工作示例。

相关文章: