嗨,我正在尝试解决数学问题,我拿了一个数字,例如45或111然后将数字分成单独的数字,例如4 5或1 1 1.然后,我将每个数字保存到var以运行方法。有没有人没有如何将数字分成单个数字。
例如,我有一个在数组上运行的循环:
for (var i = 0; i < range.length; i++) {
var n = range[i];
}
对于每个数字,我想分割它们的数字并将它们加在一起?
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
*/
暗影精灵,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
我用这种简单的方法做到了。
分割数字
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
不转换为字符串:
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;
}
最简单的...... num_string.split('').map(Number)
试试以下:
console.log((''+123).split('').map(Number))
使用ES6,你可以使用Array.from
作为iterables和Number
作为映射函数。
const getDigits = n => Array.from(n.toString(), Number);
console.log(getDigits(12345));
var num = 111,
separateDigits = num.toString().split(""), i, l = separateDigits.length;
for( i = 0; i < l; ++i ) {
someObject.someMethod( +separateDigits[i] );
}
为了从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
你可以试试这个。
var num = 99;
num=num.toString().split("").map(value=>parseInt(value,10)); //output [9,9]
希望这有帮助!
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
}
}
为了将整数分成相同顺序的单个数字,正则表达式是我使用和偏好的,因为即使它们被转换为字符串后它也可以防止丢失数字的身份。
以下代码行将整数转换为字符串,使用正则表达式匹配字符串中的任何单个数字并返回其中的数组,然后映射该数组以将其转换回数字。
const digitize = n => String(n).match(/\d/g).map(Number);
var num = 123456;
var digits = num.toString().split('');
var realDigits = digits.map(Number)
console.log(realDigits);
('' + 123456789).split('').map( x => +x ).reduce( (a,b) => a+b ) === 45
真正
或没有地图
('' + 123456789).split('').reduce( (a,b) => (+a)+(+b) ) === 45
真正
您可以单行完成,将每个数字分开,然后将它们一起添加:
var may = 12987;
var sep = (""+may).split("").map(n=>+n).reduce((a,b)=>a+b);
这是我的简短解决方案..数字总和
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))
javascript有一个功能,你可以轻松使用它。
console.log(new Intl.NumberFormat().format(number));
例如 :
console.log(new Intl.NumberFormat().format(2334325443534));
==> 2,334,325,443,534
ES6采用更优雅的方式:
const int = 123;
for (let d of int.toString()) {
console.log(d);
}
// 1
// 2
// 3
您也可以使用“数学”方式执行此操作,而不将数字视为字符串:
var num = 278;
var digits = [];
while (num > 0) {
digits.push(num % 10);
num = parseInt(num / 10);
}
digits.reverse();
console.log(digits);
我可以看到的一个好处是你不必在每个数字上运行parseInt()
,你将实际数字作为数值处理。
这是我发现的最短,但它确实将数字作为字符串返回:
let num = 12345;
[...num+''] //["1", "2", "3", "4", "5"]
或者用它来取回整数:
[...num+''].map(n=>+n) //[1, 2, 3, 4, 5]
我将提供已经给出的答案的变体,以便您可以看到一直保留数字类型的不同方法:
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}]
您可以使用字符串而不是数字来实现此目的。你可以这样做
(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);
})
// 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]
递归的有趣介绍。此答案采用Number并返回Number数字数组。它不会将数字转换为字符串作为中间步骤。
鉴于n = 1234
,
n % 10
将返回第一个(右侧湿润)数字,4
n / 10
将返回123
剩余部分Math.floor
我们可以砍下剩余的现在我们只需构建递归条件,
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 ]
分开每个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