我需要将数字拆分成数字组,然后将这些数字放入数组中。然后,我将使用这些数字进行一些简单的数学运算,然后将它们插入到文本框中。
到目前为止,我只找到了如何将数字拆分为单个数字,如下所示:
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 :(得分: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
的值更改为数字的简单方法是使用map
和Number
(在非构造函数上下文中执行类型转换):< / 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;
}