74

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

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]

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

4

24 に答える 24

101

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

var n =  123456789;
var digits = (""+n).split("");
于 2012-03-28T19:18:44.130 に答える
88

どうですか:

const n = 123456;
Array.from(n.toString()).map(Number);
// [1, 2, 3, 4, 5, 6]
于 2017-04-23T16:49:59.173 に答える
56
(123456789).toString(10).split("")

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

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

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

于 2012-03-28T19:20:38.073 に答える
27

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

それ以外の:

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

検討:

(123456789).toString(10).split("").map(Number)
于 2014-01-02T21:36:37.837 に答える
19

上記の回答を少し変更しました。'map'メソッドは、2番目の引数として'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]
于 2018-08-04T23:39:23.117 に答える
5

const toIntArray = (n) => ([...n + ""].map(v => +v))

于 2016-02-26T12:28:53.510 に答える
4

配列の破棄と文字列テンプレートを使用すると、かなり短くなります。

const n = 12345678;
const digits = [...`${n}`];
console.log(digits);

于 2019-09-12T13:35:43.630 に答える
3

値を仮定するとn

const n = 123456789

必要に応じて、ES6の最小バージョン:

String(n).split("").map(Number)

さらに短いが読みにくいバージョン:

[...String(n)].map(Number)

さらに短くしたい(しかし読みにくい)?

[...`${n}`].map(Number)

短く言う(そして基本的に判読できない)!?

[...""+n].map(Number)

今、あなたは本当のプログラマーです、おめでとうございます!

サイドノート

1つではなく2つの配列を割り当てているため、これらは(このスレッドのほとんどのように)実際には効率的ではありません。より効率的になりたいですか?1つの配列のみを割り当てるこれを試してください。

var arr = []
var str = String(n)
for (var i = 0; i < str.length; i++) {
  arr.push(Number(str[i]))
}

オールドスクールですが、より効率的です、ハザ!

于 2021-03-11T22:04:44.647 に答える
2

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

たとえば、数値はnumで、次に

const numberDigits = num.toString().split('');
于 2019-04-20T16:58:14.133 に答える
2

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

function convertNumberToDigitArray(number) {
    const arr = [];
    while (number > 0) {
        let lastDigit = number % 10;
        arr.push(lastDigit);
        number = Math.floor(number / 10);
    }
    return arr;
}
于 2019-04-28T23:10:34.557 に答える
2

文字列に変換し、空の文字列で分割することにより、数値から文字列のリストを取得できます。結果は、それぞれが数字を含む文字列の配列になります。

const num = 124124124
const strArr = `${num}`.split("")

Numberまたは、これに基づいて構築するには、各文字列の数字をマップして、それらを:に変換します。

const intArr = `${num}`.split("").map(x => Number(x))
于 2019-10-07T15:25:16.033 に答える
1

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

const n = 123456;
Array.from(n.toString(), (val) => Number(val)); // [1, 2, 3, 4, 5, 6]
于 2018-04-10T04:11:23.243 に答える
1
const number = 1435;
number.toString().split('').map(el=>parseInt(el));
于 2019-05-07T12:29:17.993 に答える
1

仮定する、

let a = 123456

最初にそれを文字列に変換し、次にsplitを適用して文字の配列に変換し、次にその上にマップして配列を整数に変換します。

let b = a.toString().split('').map(val=>parseInt(val))
console.log(b)
于 2021-02-05T11:16:10.583 に答える
0

動く:

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

その上

var j = k / 10;
于 2012-03-28T19:49:51.500 に答える
0
var num = 123456789;
num = num.toString(); //'123456789'
var digits = num.split(""); //[ '1', '2', '3', '4', '5', '6', '7', '8', '9' ]
于 2017-05-23T10:22:25.683 に答える
0

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

var n = 123456789;
var arrayN = (`${n}`).split("").map(e => parseInt(e))
于 2018-03-06T09:31:26.850 に答える
0

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

var n = 123;
n.toString().split('').map(Number);
于 2018-08-17T13:06:31.763 に答える
0

私はそれを次のように解決することになりました:

const n = 123456789;
let toIntArray = (n) => ([...n + ""].map(Number));
console.log(toIntArray(n));

于 2019-03-07T03:52:11.733 に答える
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)
于 2019-05-10T18:26:32.207 に答える
0

ES2015の文字列補間で更新します。

const num = 07734;
let numStringArr = `${num}`.split('').map(el => parseInt(el)); // [0, 7, 7, 3, 4]
于 2020-02-08T21:02:28.670 に答える
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);
于 2021-02-14T23:11:42.230 に答える
0

これは実際、私が思う最もクリーンなソリューションです。

  var n =  123456789;
  const digits = (`${n}`).split('')

文字列リテラルに入れますが、数値として保持され、配列に分割されて数字に割り当てられます。

于 2021-05-19T19:03:10.870 に答える
-1

const toIntArray = (n) => ([...n + ""].map(v => +v))

于 2019-01-05T14:59:42.873 に答える