我正在尝试解决一个数学问题,在该数学问题中,我将数字取为45
或111
,然后将数字拆分为单独的数字,例如4 5
或1 1 1
。然后,我将每个数字保存到var中以运行方法。有人知道如何将数字拆分为单个数字吗?
例如,我有一个在数组上运行的循环:
for (var i = 0; i < range.length; i++) {
var n = range[i];
}
对于每个数字,我想拆分其数字并将其加在一起吗?
Answers:
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
*/
console
API,请更改console
为alert
。
var num = 123456;
var digits = num.toString().split('');
var realDigits = digits.map(Number)
console.log(realDigits);
var realDigits = digits.map(Number)
,我们达成协议
"555".split('').map(Number)
您也可以以“数学”方式进行操作,而无需将数字视为字符串:
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
在将数字转换为罗马数字时,我已经使用了上述技术来达到良好效果,这是我开始学习我不熟悉的编程语言时最喜欢的方式之一。例如,这是我在世纪之交之后设计出一种使用Tcl将数字转换为罗马数字的方法:http : //code.activestate.com/recipes/68379-conversion-to-roman-numerals/
我的Tcl脚本中的可比较行是:
while {$arabic} {
set digit [expr {$arabic%10}]
set arabic [expr {$arabic/10}]
output.unshift
(而不是push
)指定了这个,从而使reverse()
不必要的操作(很多人都无法做到)unshift
output.unshift
。
您可以处理字符串而不是数字来实现此目的。你可以这样
(111 + '').split('')
这将返回一个字符串数组['1','1','1']
,您可以在其上进行迭代并调用parseInt
method。
parseInt('1') === 1
如果需要单个数字的总和,则可以使用reduce函数(从Javascript 1.8实现)
(111 + '').split('').reduce(function(previousValue, currentValue){
return parseInt(previousValue,10) + parseInt(currentValue,10);
})
借助ES6,您可以将字符串Array.from
作为可迭代项和Number
映射函数使用。
const getDigits = n => Array.from(n.toString(), Number);
console.log(getDigits(12345));
每个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
递归的有趣介绍。此答案取一个数字,并返回一个数字位数的数组。它并没有数量转换为一个字符串作为一个中间步骤。
鉴于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 ]
digits(123456789012)
返回[-539222987, 2]
>>
我不太了解这种行为。我想知道这是否是错误吗?
为了从中获取数字的一种有效方法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版)中,可以使用箭头功能:
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]
希望这对您有所帮助!
javascript具有此功能,您可以轻松使用它。
console.log(new Intl.NumberFormat().format(number));
例如 :
console.log(new Intl.NumberFormat().format(2334325443534));
==> 2,334,325,443,534
我可能是错的,但是解决方案却是零碎的。正如我仍在学习的那样,也许这些功能可以在同一功能中完成许多工作。请毫不犹豫地纠正我。
const totalSum = (num) => [...num + ' '].map(Number).reduce((a, b) => a + b);
因此,我们将参数转换为arr并添加空格。我们对每个元素都执行此操作,然后使用map方法将其推入新数组。拆分后,我们使用reduce求和所有元素并求和。
正如我说的,如果您看到我不了解的内容,请毫不犹豫地纠正我或改善功能。
差点忘了,以防万一:
const totalSum = (num) => ( num === 0 || num < 0) ? 'I need a positive number' : [...num + ' '].map(Number).reduce((a, b) => a + b);
如果为负数或仅为零,则将其作为参数。祝大家编码愉快。