JavaScript编号拆分为单个数字

问题描述 投票:46回答:22

嗨,我正在尝试解决数学问题,我拿了一个数字,例如45或111然后将数字分成单独的数字,例如4 5或1 1 1.然后,我将每个数字保存到var以运行方法。有没有人没有如何将数字分成单个数字。

例如,我有一个在数组上运行的循环:

for (var i = 0; i < range.length; i++) {
var n = range[i];   
}

对于每个数字,我想分割它们的数字并将它们加在一起?

javascript math
22个回答
58
投票
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);

/* Outputs:
 *
 * [1, 2, 3, 5, 4, 9, 8, 7]
 */ 

更新:计算总和

for (var i = 0, sum = 0; i < output.length; sum += output[i++]);
console.log(sum);

/*
 * Outputs: 39
 */

1
投票

暗影精灵,Orien扩展版

var num:Number = 1523;
var digits:Array = [];
var cnt:int = 0;
while (num > 0) {
    var mod:int = num % 10;
    digits.push(mod * Math.pow(10, cnt))

    num = Math.floor(num / 10);
    cnt++;
}
digits.reverse();
trace(digits);

输出:1000,500,20,3


1
投票

我用这种简单的方法做到了。

分割数字

var N = 69;
var arr = N.toString().split('').map(Number)
// outputs [6,9]
console.log( arr ); 

将它们添加到一起

console.log(arr.reduce( (a,b) => a+b )); // 15

1
投票

不转换为字符串:

function toDigits(number) {
    var left;
    var results = [];

    while (true) {
        left = number % 10;
        results.unshift(left);
        number = (number - left) / 10;
        if (number === 0) {
            break;
        }
    }

    return results;
}

1
投票

最简单的...... num_string.split('').map(Number)

试试以下:

console.log((''+123).split('').map(Number))

1
投票

使用ES6,你可以使用Array.from作为iterablesNumber作为映射函数。

const getDigits = n => Array.from(n.toString(), Number);

console.log(getDigits(12345));

0
投票
var num = 111,
 separateDigits = num.toString().split(""), i, l = separateDigits.length;

for( i = 0; i < l; ++i ) {
someObject.someMethod( +separateDigits[i] );
}

0
投票

为了从number获取数字的功能方法是从string获取number,将其分成array(字符)并将每个元素映射回数字。

例如:

var number = 123456;

var array = number.toString()
.split('')
.map(function(item, index) {
   return parseInt(item);
});

console.log(array); // returns [1, 2, 3, 4, 5, 6]

如果您还需要对所有数字求和,可以将reduce()方法附加到上一个代码:

var num = 123456;

var array = num.toString()
.split('')
.map(function(item, index) {
   return parseInt(item);
})
.reduce(function(previousValue, currentValue, index, array) {
  return previousValue + currentValue;
}, 0);

console.log(array); // returns 21

作为替代方案,使用ECMAScript 2015(第6版),您可以使用arrow functions

var number = 123456;
var array = number.toString().split('').map((item, index) => parseInt(item));
console.log(array); // returns [1, 2, 3, 4, 5, 6]

如果需要对所有数字求和,可以将reduce()方法附加到上一个代码:

var num = 123456;

var result = num.toString()
.split('')
.map((item, index) => parseInt(item))
.reduce((previousValue, currentValue) => previousValue + currentValue, 0);

console.log(result); // returns 21

0
投票

你可以试试这个。

  var num = 99;

  num=num.toString().split("").map(value=>parseInt(value,10)); //output [9,9]

希望这有帮助!


0
投票
function iterateNumber(N, f) {
    let n = N;
    var length = Math.log(n) * Math.LOG10E + 1 | 0;
    for (let i = 0; i < length; i++) {
        const pow = Math.pow(10, length - i - 1)
        let c = (n - (n % pow)) / pow
        f(c, i)
        n %= pow
    }
}

0
投票

为了将整数分成相同顺序的单个数字,正则表达式是我使用和偏好的,因为即使它们被转换为字符串后它也可以防止丢失数字的身份。

以下代码行将整数转换为字符串,使用正则表达式匹配字符串中的任何单个数字并返回其中的数组,然后映射该数组以将其转换回数字。

const digitize = n => String(n).match(/\d/g).map(Number);


74
投票

var num = 123456;
var digits = num.toString().split('');
var realDigits = digits.map(Number)
console.log(realDigits);

0
投票

('' + 123456789).split('').map( x => +x ).reduce( (a,b) => a+b ) === 45

真正

或没有地图

('' + 123456789).split('').reduce( (a,b) => (+a)+(+b) ) === 45

真正


0
投票

您可以单行完成,将每个数字分开,然后将它们一起添加:

var may = 12987;
var sep = (""+may).split("").map(n=>+n).reduce((a,b)=>a+b);

0
投票

这是我的简短解决方案..数字总和

    function sum (num) {
    let sNumber = num
        .toString()
        .split('')
        .reduce((el1, el2) => {
            return Number(el1) + Number(el2)
        }, 0)
        return sNumber
     }

的console.log(总和(123)) 的console.log(总和(456))


0
投票

javascript有一个功能,你可以轻松使用它。

console.log(new Intl.NumberFormat().format(number));

例如 :

console.log(new Intl.NumberFormat().format(2334325443534));
==> 2,334,325,443,534

-1
投票

ES6采用更优雅的方式:

const int = 123;
for (let d of int.toString()) {
    console.log(d);
}
// 1
// 2
// 3

23
投票

您也可以使用“数学”方式执行此操作,而不将数字视为字符串:

var num = 278;
var digits = [];
while (num > 0) {
    digits.push(num % 10);
    num = parseInt(num / 10);
}
digits.reverse();
console.log(digits);

我可以看到的一个好处是你不必在每个数字上运行parseInt(),你将实际数字作为数值处理。


14
投票

这是我发现的最短,但它确实将数字作为字符串返回:

let num = 12345;

[...num+''] //["1", "2", "3", "4", "5"]

或者用它来取回整数:

[...num+''].map(n=>+n) //[1, 2, 3, 4, 5]

9
投票

我将提供已经给出的答案的变体,以便您可以看到一直保留数字类型的不同方法:

var number = 12354987,
    output = [];

while (number) {
    output.push(number % 10);
    number = Math.floor(number/10);
}

console.log(output.reverse().join(',')); // 1,2,3,5,4,9,8,7

在将数字转换为罗马数字时,我使用了上述技术,效果很好,这是我开始学习一种我不熟悉的编程语言的最喜欢的方法之一。例如,这里是我如何设计一种方法,用10年前的Tcl将数字转换为罗马数字:http://code.activestate.com/recipes/68379-conversion-to-roman-numerals/

我的Tcl脚本中可比较的行是:

  while {$arabic} {
    set digit [expr {$arabic%10}]
    set arabic [expr {$arabic/10}]

4
投票

您可以使用字符串而不是数字来实现此目的。你可以这样做

(111 + '').split('')

这将返回一个字符串['1','1','1']数组,您可以在其上迭代并调用parseInt方法。

parseInt('1') === 1

如果你想要各个数字的总和,你可以使用reduce函数(从Javascript 1.8实现)

(111 + '').split('').reduce(function(previousValue, currentValue){  
  return parseInt(previousValue,10) + parseInt(currentValue,10);  
})

4
投票

// Split positive integer n < 1e21 into digits:
function digits(n) {
  return Array.from(String(n), Number);
}

// Example:
console.log(digits(1234)); // [1, 2, 3, 4]

2
投票

递归的有趣介绍。此答案采用Number并返回Number数字数组。它不会将数字转换为字符串作为中间步骤。

鉴于n = 1234

  • n % 10将返回第一个(右侧湿润)数字,4
  • n / 10将返回123剩余部分
  • 使用Math.floor我们可以砍下剩余的
  • 重复这些步骤,我们可以形成整个结果

现在我们只需构建递归条件,

  • 如果该数字已经是一个数字(n <10),则返回该数字的数组单例
  • 否则(归纳)数字为10或更大;重复并前置到第一个数字

const digits = (n = 0) =>
  n < 10
    ? [ n ]
    : [ ... digits (Math.floor (n / 10)), n % 10 ]

console.log (digits ())        // [ 0 ]
console.log (digits (1))       // [ 1 ]
console.log (digits (12))      // [ 1, 2 ]
console.log (digits (123))     // [ 1, 2, 3 ]
console.log (digits (11234))   // [ 1, 2, 3, 4 ]

console.log (digits (123456789012))
// [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2 ]

1
投票

分开每个2参数。

function separator(str,sep) {
    var output = '';
    for (var i = str.length; i > 0; i-=2) {
        var ii = i-1;
        if(output) {
            output = str.charAt(ii-1)+str.charAt(ii)+sep+output;
        } else {
            output = str.charAt(ii-1)+str.charAt(ii);
        }            
    }
    return output;
}
console.log(separator('123456',':')); //Will return 12:34:56
© www.soinside.com 2019 - 2024. All rights reserved.