web-dev-qa-db-ja.com

JavaScriptの配列で整数を個別の数字に分割するにはどうすればよいですか?

これはこれまでの私のコードです:

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]

誰かが問題を見ることができるか、より良い解決策を見つけることができれば、私は非常に感謝します!

46
magnusbl

なぜこれをしないのですか?

var n =  123456789;
var digits = (""+n).split("");
72
(123456789).toString(10).split("")

^^これは文字列の配列を返します

(123456789).toString(10).split("").map(function(t){return parseInt(t)})

^^これはintの配列を返します

46
samccone

どうですか:

const n = 123456;
Array.from(n.toString()).map(Number);
// [1, 2, 3, 4, 5, 6]
32

これは数か月前に尋ねられたことに気づきましたが、私はより簡潔なサムコンの答えに追加がありますが、コメントとして追加する担当者がいません!

の代わりに:

(123456789).toString(10).split("").map(function(t){return parseInt(t)})

考慮してください:

(123456789).toString(10).split("").map(Number)
26
user2521439

上記の答えを少し修正しました。 「map」メソッドは、2番目の引数として「Array.from」に既に組み込まれているため、明示的に「map」メソッドを呼び出す必要はありません。 [〜#〜] mdn [〜#〜] の時点で。

Array.from(arrayLike [、mapFn [、thisArg]])

let num = 1234;
let arr = Array.from(String(num), Number);
console.log(arr); // [1, 2, 3, 4]
7
Alexander
const toIntArray = (n) => ([...n + ""].map(v => +v))
3
Alexey Sukhikh

NicolásFantone の答えの代わりになります。あなたはそれが少し読みにくいかもしれないと主張することができます。強調点は、Array.from()がオプションのマップ関数をパラメーターとして使用できることです。中間配列が作成されないため、この方法でパフォーマンスが向上します。

const n = 123456;
Array.from(n.toString(), (val) => Number(val)); // [1, 2, 3, 4, 5, 6]
1
PDub

移動:

var k = Math.pow(10, i);

var j = k / 10;
0
matthewk
var num = 123456789;
num = num.toString(); //'123456789'
var digits = num.split(""); //[ '1', '2', '3', '4', '5', '6', '7', '8', '9' ]
0

非常に簡単です。まず、JavaScriptでtoString()メソッドを使用して数値を文字列に変換し、次にsplit()メソッドを使用して文字列を個々の文字の配列に変換します。

たとえば、番号はnumであり、その後

const numberDigits = num.toString().split('');
0
Naved Ahmad

これは、0より大きい数値に対して機能します。数値を文字列に変換する必要はありません。

function convertNumberToDigitArray(number) {
    const arr = [];
    while (number > 0) {
        let lastDigit = number % 10;
        arr.Push(lastDigit);
        number = Math.floor(number / 10);
    }
    return arr;
}
0
techguy2000

この質問には5年以上かかりましたが、コーディング/スクリプティングの効率的な方法をいつでも歓迎します。

var n = 123456789;
var arrayN = (`${n}`).split("").map(e => parseInt(e))
0
Sanjay Shr

ここで別の方法。 Javascriptの数値はデフォルトでは分割できないため、最初に数値を文字列に変換する必要があります。

var n = 123;
n.toString().split('').map(Number);
0
Jungdo Lee
const toIntArray = (n) => ([...n + ""].map(v => +v))
let input = 12345664
const output = []
while (input !== 0) {
  const roundedInput = Math.floor(input / 10)
  output.Push(input - roundedInput * 10)
  input = roundedInput
}
console.log(output)
0
Nick

私はそれを次のように解決しました:

const n = 123456789;
let toIntArray = (n) => ([...n + ""].map(Number));
console.log(toIntArray(n));
0
Penny Liu
const number = 1435;
number.toString().split('').map(el=>parseInt(el));
0
Adam Kaczmarek