【问题标题】:how to split a number into groups of n digits如何将一个数字分成n个数字组
【发布时间】:2015-11-18 23:09:50
【问题描述】:

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

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

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

【问题讨论】:

  • 将其转换为字符串,然后将其拆分为子字符串,仅此而已。

标签: javascript


【解决方案1】:

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

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

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

希望对你有帮助。

【讨论】:

  • 非常感谢“从右侧开始”版本!这节省了我的时间(不过,我必须弄清楚这个正则表达式到底发生了什么:-))。
【解决方案2】:

一个相当简洁的方法是使用正则表达式。例如,要将数字分成最多 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 ]

【讨论】:

  • 你知道如何实现这个吗:'12354987' - ['12','354','987']
  • 已使用下面的 ZER0 答案。
  • 是的,您可以使用该答案中更复杂的正则表达式来做到这一点。否则,使用循环和字符串切片就很简单了,从字符串的末尾开始。
【解决方案3】:

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

【讨论】:

    【解决方案4】:

    现在 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-31
      • 1970-01-01
      • 1970-01-01
      • 2012-01-01
      • 1970-01-01
      • 2011-12-26
      • 2015-03-28
      • 1970-01-01
      相关资源
      最近更新 更多