到目前为止,这是我的代码:
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);
但是当我运行我的代码时,我得到了这个:[9, 1, 2, 3, 4, 5, 6, 7, 8]
如果有人能看到问题或找到更好的解决方案,我会非常感激!
答案 0 :(得分:69)
为什么不这样做?
var n = 123456789;
var digits = (""+n).split("");
答案 1 :(得分:45)
(123456789).toString(10).split("")
^^这将返回一个字符串数组
(123456789).toString(10).split("").map(function(t){return parseInt(t)})
^^这将返回一个int数组
答案 2 :(得分:30)
怎么样:
const n = 123456;
Array.from(n.toString()).map(Number);
// [1, 2, 3, 4, 5, 6]
答案 3 :(得分:26)
我意识到这是几个月前被问过的,但我对samccone的回答更加简洁,但我没有代表添加作为评论!
而不是:
(123456789).toString(10).split("").map(function(t){return parseInt(t)})
考虑:
(123456789).toString(10).split("").map(Number)
答案 4 :(得分:4)
稍微修改了上面的答案。我们实际上不必显式调用'map'方法,因为它已经作为第二个参数内置在'Array.from'中。 从MDN开始。
Array.from(arrayLike [,mapFn [,thisArg]])
let num = 1234;
let arr = Array.from(String(num), Number);
console.log(arr); // [1, 2, 3, 4]
答案 5 :(得分:3)
const toIntArray = (n) => ([...n + ""].map(v => +v))
答案 6 :(得分:2)
假设值 n
:
const n = 123456789
如果您愿意,可以使用最小的 ES6 版本:
String(n).split("").map(Number)
一个更短但可读性更差的版本:
[...String(n)].map(Number)
想要更短(但可读性更差)?
[...`${n}`].map(Number)
你说的更短(基本上难以辨认)!?
[...""+n].map(Number)
现在你是一名真正的程序员了,恭喜!
由于您分配的是 2 个数组而不是 1 个数组,因此这些并不是真正有效的(与本线程中的大多数一样)。想要更有效吗?试试这个只分配一个数组:
var arr = []
var str = String(n)
for (var i = 0; i < str.length; i++) {
arr.push(Number(str[i]))
}
老派但更有效率,哈扎!
答案 7 :(得分:2)
您可以从数字中获取字符串列表,方法是将其转换为字符串,然后将其与空字符串分开。结果将是一个字符串数组,每个字符串包含一个数字:
const num = 124124124
const strArr = `${num}`.split("")
或以此为基础,映射每个字符串数字并将其转换为Number
:
const intArr = `${num}`.split("").map(x => Number(x))
答案 8 :(得分:1)
这是Nicolás Fantone答案的替代方案。你可能会说它可能有点不那么可读了。重点是Array.from()可以将可选的map函数作为参数。这种方式有一些性能提升,因为没有创建中间数组。
const n = 123456;
Array.from(n.toString(), (val) => Number(val)); // [1, 2, 3, 4, 5, 6]
答案 9 :(得分:1)
假设,
let a = 123456
首先我们将其转换为字符串,然后应用 split 将其转换为字符数组,然后对其进行映射以将数组转换为整数。
let b = a.toString().split('').map(val=>parseInt(val))
console.log(b)
答案 10 :(得分:1)
使用数组解构和字符串模板非常短:
const n = 12345678;
const digits = [...`${n}`];
console.log(digits);
答案 11 :(得分:0)
这实际上是我认为最干净的解决方案。
var n = 123456789;
const digits = (`${n}`).split('')
你把它放在一个字符串文字中,但它被保留为数字,然后它被拆分为一个数组并分配给数字。
答案 12 :(得分:0)
var n = 38679;
var digits = n.toString().split("");
console.log(digits);
现在数字 n 被分成它的数字,并且它们被呈现在一个数组中,并且该数组的每个元素都是字符串格式。要将它们转换为数字格式,请执行以下操作:
var digitsNum = digits.map(Number);
console.log(digitsNum);
或者从一开始就得到一个所有元素都是数字格式的数组:
var n = 38679;
var digits = n.toString().split("").map(Number);
console.log(digits);
答案 13 :(得分:0)
在ES2015中使用字符串插值进行更新。
const num = 07734;
let numStringArr = `${num}`.split('').map(el => parseInt(el)); // [0, 7, 7, 3, 4]
答案 14 :(得分:0)
let input = 12345664
const output = []
while (input !== 0) {
const roundedInput = Math.floor(input / 10)
output.push(input - roundedInput * 10)
input = roundedInput
}
console.log(output)
答案 15 :(得分:0)
const number = 1435;
number.toString().split('').map(el=>parseInt(el));
答案 16 :(得分:0)
这将适用于大于0的数字。您无需将数字转换为字符串:
function convertNumberToDigitArray(number) {
const arr = [];
while (number > 0) {
let lastDigit = number % 10;
arr.push(lastDigit);
number = Math.floor(number / 10);
}
return arr;
}
答案 17 :(得分:0)
这非常简单,首先使用JavaScript中的 toString()方法将数字转换为字符串,然后使用 split()方法将字符串转换为以下形式的数组单个字符。
例如,数字为 num ,然后
const numberDigits = num.toString().split('');
答案 18 :(得分:0)
我最终解决了以下问题:
const n = 123456789;
let toIntArray = (n) => ([...n + ""].map(Number));
console.log(toIntArray(n));
答案 19 :(得分:0)
这里的另一种方法。由于默认情况下Javascript中的数字不可拆分,因此您需要先将数字转换为字符串。
var n = 123;
n.toString().split('').map(Number);
答案 20 :(得分:0)
这个问题已经有5年多了,但他总是欢迎使用有效的编码/脚本编写方式。
var n = 123456789;
var arrayN = (`${n}`).split("").map(e => parseInt(e))
答案 21 :(得分:0)
var num = 123456789;
num = num.toString(); //'123456789'
var digits = num.split(""); //[ '1', '2', '3', '4', '5', '6', '7', '8', '9' ]
答案 22 :(得分:0)
移动:
var k = Math.pow(10, i);
以上
var j = k / 10;
答案 23 :(得分:-1)
const toIntArray = (n) => ([...n + ""].map(v => +v))