问题
This is my code so far:
var n = 123456789;
var d = n.toString().length;
var digits = [];
var squaredDigits = [];
for (i = d; i >= 1; i--) {
var j = k / 10;
var r = (n % k / j) - 0.5;
var k = Math.pow(10, i);
var result = r.toFixed();
digits.push(result);
}
console.log(digits);
But when I run my code I get this: [9, 1, 2, 3, 4, 5, 6, 7, 8]
If anyone can see the problem or find a better solution I would very much appreciate it!
回答1:
Why not just do this?
var n = 123456789;
var digits = (""+n).split("");
回答2:
(123456789).toString(10).split("")
^^ this will return an array of strings
(123456789).toString(10).split("").map(function(t){return parseInt(t)})
^^ this will return an array of ints
回答3:
What about:
const n = 123456;
Array.from(n.toString()).map(Number);
// [1, 2, 3, 4, 5, 6]
回答4:
I realize this was asked several months ago, but I have an addition to samccone's answer which is more succinct but I don't have the rep to add as a comment!
Instead of:
(123456789).toString(10).split("").map(function(t){return parseInt(t)})
Consider:
(123456789).toString(10).split("").map(Number)
回答5:
Modified the above answer a little bit. We don't really have to call the 'map' method explicitly, because it is already built-in into the 'Array.from' as a second argument. As of MDN.
Array.from(arrayLike[, mapFn[, thisArg]])
let num = 1234;
let arr = Array.from(String(num), Number);
console.log(arr); // [1, 2, 3, 4]
回答6:
const toIntArray = (n) => ([...n + ""].map(v => +v))
回答7:
You can get a list of string from your number, by converting it to a string, and then splitting it with an empty string. The result will be an array of strings, each containing a digit:
const num = 124124124
const strArr = `${num}`.split("")
OR to build on this, map each string digit and convert them to a Number
:
const intArr = `${num}`.split("").map(x => Number(x))
回答8:
Here's an alternative to Nicolás Fantone's answer. You could argue it's maybe a little less readable. The emphasis is that Array.from() can take an optional map function as a parameter. There are some performance gains this way since no intermediate array gets created.
const n = 123456;
Array.from(n.toString(), (val) => Number(val)); // [1, 2, 3, 4, 5, 6]
回答9:
const number = 1435;
number.toString().split('').map(el=>parseInt(el));
回答10:
It is pretty short using Array destructuring and String templates:
const n = 12345678;
const digits = [...`${n}`];
console.log(digits);
回答11:
Move:
var k = Math.pow(10, i);
above
var j = k / 10;
回答12:
var num = 123456789;
num = num.toString(); //'123456789'
var digits = num.split(""); //[ '1', '2', '3', '4', '5', '6', '7', '8', '9' ]
回答13:
It's been a 5+ years for this question but heay always welcome to the efficient ways of coding/scripting.
var n = 123456789;
var arrayN = (`${n}`).split("").map(e => parseInt(e))
回答14:
Another method here. Since number in Javascript is not splittable by default, you need to convert the number into a string first.
var n = 123;
n.toString().split('').map(Number);
回答15:
I ended up solving it as follows:
const n = 123456789;
let toIntArray = (n) => ([...n + ""].map(Number));
console.log(toIntArray(n));
回答16:
It's very simple, first convert the number to string using the toString() method in JavaScript and then use split() method to convert the string to an array of individual characters.
For example, the number is num, then
const numberDigits = num.toString().split('');
回答17:
This will work for a number greater than 0. You don't need to convert the number into string:
function convertNumberToDigitArray(number) {
const arr = [];
while (number > 0) {
let lastDigit = number % 10;
arr.push(lastDigit);
number = Math.floor(number / 10);
}
return arr;
}
回答18:
let input = 12345664
const output = []
while (input !== 0) {
const roundedInput = Math.floor(input / 10)
output.push(input - roundedInput * 10)
input = roundedInput
}
console.log(output)
回答19:
const toIntArray = (n) => ([...n + ""].map(v => +v))
来源:https://stackoverflow.com/questions/9914216/how-do-i-separate-an-integer-into-separate-digits-in-an-array-in-javascript