JavaScript 数字拆分为单独的数字
我正在尝试解决一个数学问题,其中我取一个数字,例如 45
或 111
,然后将数字拆分为单独的数字,例如 4 5
或1 1 1
。然后我会将每个数字保存到一个 var 中以运行方法。有谁知道如何将数字拆分为单独的数字?
例如,我有一个在数组上运行的循环:
for (var i = 0; i < range.length; i++) {
var n = range[i];
}
对于每个数字,我想分割它的数字并将它们加在一起?
I am trying to solve a math problem where I take a number e.g. 45
, or 111
and then split the number into separate digits e.g. 4 5
or 1 1 1
. I will then save each number to a var to run a method on. Does anyone know how to split a number into individual digitals?
For example I have a loop that runs on an array :
for (var i = 0; i < range.length; i++) {
var n = range[i];
}
For each number, I would like to split its digits and add them together?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(29)
更新:计算总和
UPDATE: Calculating a sum
您还可以以“数学”方式完成此操作,而不将数字视为字符串:
我看到的一个好处是,您不必对每个数字都运行
parseInt()
,您可以将实际数字作为数值进行处理。You can also do it in the "mathematical" way without treating the number as a string:
One upside I can see is that you won't have to run
parseInt()
on every digit, you're dealing with the actual digits as numeric values.这是我发现的最短的,尽管它确实以字符串形式返回数字:
或者使用它来返回整数:
This is the shortest I've found, though it does return the digits as strings:
Or use this to get back integers:
我将提供已经给出的答案的变体,以便您可以看到一种始终保留数字类型的不同方法:
在将数字转换为罗马数字时,我使用了诸如上述的技术,效果良好,这是其中之一我最喜欢的开始学习我不熟悉的编程语言的方法。例如,在世纪之交之后,我设计了一种使用 Tcl 将数字转换为罗马数字的方法: http://code.activestate.com/recipes/68379-conversion-to-roman-numerals/
我的 Tcl 脚本中的类似行是:
I will provide a variation on an answer already given so you can see a different approach that preserves the numeric type all along:
I've used a technique such as the above to good effect when converting a number to Roman numerals, which is one of my favorite ways to begin to learn a programming language I'm not familiar with. For instance here is how I devised a way to convert numbers to Roman numerals with Tcl slightly after the turn of the century: http://code.activestate.com/recipes/68379-conversion-to-roman-numerals/
The comparable lines in my Tcl script being:
使用
String
、split
和map
:Use
String
,split
andmap
:您可以使用字符串而不是数字来实现此目的。您可以这样做
这将返回一个字符串数组
['1','1','1']
,您可以对其进行迭代并调用parseInt
方法。如果你想要各个数字的总和,你可以使用reduce函数(从Javascript 1.8实现),如下所示
You can work on strings instead of numbers to achieve this. You can do it like this
This will return an array of strings
['1','1','1']
on which you can iterate upon and callparseInt
method.If you want the sum of individual digits, you can use the reduce function (implemented from Javascript 1.8) like this
不转换为字符串:
Without converting to string:
使用
String
、...
和map
或者,使用
...
和reduce
来获取数字及其总和。Using
String
,...
andmap
Alternatively, using
...
andreduce
to get digits and their sum.将每 2 个参数分开。
Separate each 2 parametr.
对递归的有趣介绍。该答案接受一个 Number 并返回一个 Number 数字数组。它不会将数字转换为字符串作为中间步骤。
给定
n = 1234
,n % 10
将返回第一个(右润)数字,4
n / 10
将返回123
并带有一些余数Math.floor
我们可以去掉余数现在我们只需要构建递归条件,
A fun introduction to recursion. This answer takes a Number and returns an array of Number digits. It does not convert the number to a string as an intermediate step.
Given
n = 1234
,n % 10
will return first (right-moist) digit,4
n / 10
will return123
with some remainderMath.floor
we can chop the remainder offNow we just have to build the recursion condition,
对于 ES6,您可以使用
Array .from
,字符串数字为 可迭代 和Number
作为映射函数。With ES6, you could use
Array.from
with a stringed number as iterables andNumber
as mapping function.这也有效:
This also works:
影子向导,Orien 的扩展版本
输出:1000,500,20,3
Shadow Wizard , extended version by Orien
output:1000,500,20,3
我用了这个简单的方法来做到这一点。
分割数字
将它们加在一起
I used this simple way of doing it.
To split digits
To add them together
最简单的......
num_string.split('').map(Number)
尝试以下:
And the easiest....
num_string.split('').map(Number)
Try below:
为了以相同的顺序将整数拆分为各个数字,我使用并更喜欢正则表达式,因为它可以防止丢失数字的标识,即使它们已转换为字符串也是如此。
以下代码行将整数转换为字符串,使用正则表达式匹配字符串内的任何单个数字并返回这些数字的数组,然后将该数组映射为转换回数字。
const digitalize = n =>; String(n).match(/\d/g).map(Number);
To just split an integer into its individual digits in the same order, Regular Expression is what I used and prefer since it prevents the chance of loosing the identity of the numbers even after they have been converted into string.
The following line of code convert the integer into a string, uses regex to match any individual digit inside the string and return an array of those, after which that array is mapped to be converted back to numbers.
const digitize = n => String(n).match(/\d/g).map(Number);
我发布这个答案是为了介绍 unshift 的使用,这是一种现代解决方案。使用
push
,您可以添加到数组的末尾,而 unshift 可以添加到开头。这使得数学方法更加强大,因为您不再需要逆向。I am posting this answer to introduce the use of unshift which is a modern solution. With
push
, you add to the end of an array while unshift adds to the beginning. This makes the mathematical approach more powerful as you won't need to reverse anymore.并作为一个班轮。
And as a one liner.
从
number
获取数字的函数方法是从number
获取string
,将其拆分为数组
(字符)并将每个元素映射回数字。例如:
如果您还需要对所有数字求和,则可以附加
reduce()
方法到前面的代码:作为替代方案,使用 ECMAScript 2015(第 6 版),您可以使用 箭头函数:
如果您需要对所有数字求和,您可以将
reduce()
方法附加到前面的代码中:A functional approach in order to get digits from a
number
would be to get astring
from yournumber
, split it into anarray
(of characters) and map each element back into a number.For example:
If you also need to sum all digits, you can append the
reduce()
method to the previous code:As an alternative, with ECMAScript 2015 (6th Edition), you can use arrow functions:
If you need to sum all digits, you can append the
reduce()
method to the previous code:你可以试试这个。
希望这有帮助!
You can try this.
Hope this helped!
('' + 123456789).split('').map( x => +x ).reduce( (a,b) => a+b ) === 45
true
或没有地图
('' + 123456789).split('').reduce( (a,b) => (+a)+(+b) ) === 45
正确
('' + 123456789).split('').map( x => +x ).reduce( (a,b) => a+b ) === 45
true
or without map
('' + 123456789).split('').reduce( (a,b) => (+a)+(+b) ) === 45
true
您可以在单行中完成,将每个数字分开,然后将它们加在一起:
You can do it in single line, seperate each digits than add them together :
这是我的简短解决方案..带有数字总和
This is my short solution.. with sum of number
javascript有一个函数,你可以很容易地使用它。
例如 :
javascript has a function for it and you can use it easily.
for example :
我可能是错的,但解决方案是零碎的。也许,正如我仍在学习的那样,这些函数在同一个函数中可以做很多事情。请随时纠正我。
因此,我们将参数转换为 and arr,并添加空格。我们对每个元素都进行这样的操作,并使用 map 方法将其推送到一个新数组中。分割后,我们使用reduce对所有元素求和并得到总数。
正如我所说,如果您看到我没有看到的内容,请毫不犹豫地纠正我或改进功能。
差点忘了,以防万一:
如果负数或只是简单的零作为参数下降。祝我们大家编码愉快。
I might be wrong, but a solution picking up bits and pieces. Perhaps, as I still learning, is that the functions does many things in the same one. Do not hesitate to correct me, please.
So we take the parameter and convert it to and arr, adding empty spaces. We do such operation in every single element and push it into a new array with the map method. Once splited, we use reduce to sum all the elements and get the total.
As I said, don't hesitate to correct me or improve the function if you see something that I don't.
Almost forgot, just in case:
If negatives numbers or just plain zero go down as parameters. Happy coding to us all.