如何将一个数字分成n位数的组
how to split a number into groups of n digits
我需要将一个数字拆分为数字组,然后将这些数字放入一个数组中。然后我会用这些数字做一些简单的数学运算,然后把它们插入到一个文本框中。
到目前为止,我只找到了如何将一个数字拆分为单个数字,如下所示:
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
的值改回数字的一个简单方法是使用map
和Number
(在非构造函数上下文中执行类型转换):
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上的工作示例。
相关文章:
- 递增一个数字而不去掉前导零
- 如何为jQuery屏蔽输入插件创建一个允许字母数字、空格和重音字符的掩码
- 我想在AngularJS应用程序中创建一个输入数字框,用户不应该在该框上键入十进制数字.(一个整数输入框)
- 制作一个regex来验证只有一个数字的字符串
- 如何限制一个字段只接受4个数字字符作为输入,并获得'It’这是潜水警报
- 为什么这个正则表达式不't匹配最后一个字母数字字符
- 一个jquery验证器方法,它不接受纯数字或纯特殊字符,但接受上面是否有字母
- 如何拆分一个整数和产生的所有数字来创建一个新数字
- 如何使用至少一个数字、一个大写字母和6-20个字符验证密码
- 当与另一个实例进行比较时,我的类实例如何隐式返回数字
- 简单的Javascript方式,在输入字段的每5位数字后添加一个空格
- 有没有办法在里面看到一个数字'的64位浮点IEEE754表示
- PHP函数识别3个数字中最低的一个并更改其类
- 我如何解析二's是一个数字的补码字符串
- 为什么我需要在这里输入var,为什么它会给我一个数字作为答案?(Javascript)
- 在我的网站上创建一个在1-10之间不断变化的数字时遇到了问题.Javascript
- 如何获取一个以零开头的数字的位数
- 如何创建一个确定2个数字之间值的函数
- 当我添加一个新数字时,如何获得一些数字的即时平均值
- 为什么 JavaScript 如果一个数字有一个前导零,就将其视为八进制