it-swarm-id.com

Nomor JavaScript Dipecah menjadi masing-masing digit

Hai, saya mencoba menyelesaikan masalah matematika tempat saya mengambil nomor mis. 45, atau 111 dan kemudian pisahkan angkanya menjadi digit terpisah mis. 4 5 atau 1 1 1. Kemudian saya akan menyimpan setiap angka ke var untuk menjalankan metode. Adakah yang tidak tahu bagaimana membagi angka menjadi digit individual. 

Sebagai contoh, saya memiliki loop yang berjalan di array: 

for (var i = 0; i < range.length; i++) {
var n = range[i];   
}

Untuk setiap angka, saya ingin membagi digitnya dan menambahkannya bersama?

42
jonnyhitek
var number = 12354987,
    output = [],
    sNumber = number.toString();

for (var i = 0, len = sNumber.length; i < len; i += 1) {
    output.Push(+sNumber.charAt(i));
}

console.log(output);

/* Outputs:
 *
 * [1, 2, 3, 5, 4, 9, 8, 7]
 */ 

PEMBARUAN: Menghitung jumlah

for (var i = 0, sum = 0; i < output.length; sum += output[i++]);
console.log(sum);

/*
 * Outputs: 39
 */
46
Lapple

var num = 123456;
var digits = num.toString().split('');
var realDigits = digits.map(Number)
console.log(realDigits);

63
Brian Glaz

Anda juga dapat melakukannya dengan cara "matematis" tanpa memperlakukan angka sebagai string:

var num = 278;
var digits = [];
while (num > 0) {
    digits[digits.length] = num % 10;
    num = parseInt(num / 10);
}
digits.reverse();
alert(digits);

Satu sisi positif yang dapat saya lihat adalah bahwa Anda tidak harus menjalankan parseInt() pada setiap digit, Anda berurusan dengan digit aktual sebagai nilai numerik.

Kaset uji langsung .

17
Shadow Wizard

Saya akan memberikan variasi pada jawaban yang sudah diberikan sehingga Anda dapat melihat pendekatan berbeda yang mempertahankan tipe numerik selama ini:

var number = 12354987,
    output = [];

while (number) {
    output.Push(number % 10);
    number = Math.floor(number/10);
}

console.log(output.reverse().join(',')); // 1,2,3,5,4,9,8,7

Saya telah menggunakan teknik seperti di atas untuk efek yang baik ketika mengubah angka menjadi angka Romawi, yang merupakan salah satu cara favorit saya untuk mulai belajar bahasa pemrograman yang tidak saya kenal. Misalnya di sini adalah bagaimana saya menemukan cara untuk mengubah angka menjadi angka Romawi dengan Tcl 10 tahun yang lalu: http://code.activestate.com/recipes/68379-conversion-to-roman-numerals/

Baris yang sebanding dalam skrip Tcl saya adalah:

  while {$arabic} {
    set digit [expr {$arabic%10}]
    set arabic [expr {$arabic/10}]
9
George Jempty

Ini adalah yang terpendek yang saya temukan, meskipun mengembalikan digit sebagai string:

let num = 12345;

[...num+''] //["1", "2", "3", "4", "5"]

Atau gunakan ini untuk mendapatkan kembali integer:

[...num+''].map(n=>+n) //[1, 2, 3, 4, 5]
9
Marco Gaspari

Anda dapat mengerjakan string alih-alih angka untuk mencapai ini. Anda bisa melakukannya seperti ini 

(111 + '').split('')

Ini akan mengembalikan array string ['1','1','1'] di mana Anda dapat mengulanginya dan memanggil metode parseInt.

parseInt('1') === 1

Jika Anda ingin jumlah masing-masing digit, Anda dapat menggunakan fungsi pengurangan (diimplementasikan dari Javascript 1.8) seperti ini

(111 + '').split('').reduce(function(previousValue, currentValue){  
  return parseInt(previousValue,10) + parseInt(currentValue,10);  
})
4
Narendra Yadala

// Split positive integer n < 1e21 into digits:
function digits(n) {
  return Array.from(String(n), Number);
}

// Example:
console.log(digits(1234)); // [1, 2, 3, 4]

3
le_m

Pengantar menyenangkan untuk rekursi. Jawaban ini mengambil Angka dan mengembalikan array Angka digit. Itu tidak mengkonversi nomor ke string sebagai langkah perantara.

Diberikan n = 1234,

  • n % 10 akan mengembalikan digit pertama (lembab kanan), 4
  • n / 10 akan mengembalikan 123 dengan sisanya
  • Menggunakan Math.floor kita dapat memotong sisanya
  • Mengulangi langkah-langkah ini, kita dapat membentuk seluruh hasil

Sekarang kita hanya perlu membangun kondisi rekursi,

  • Jika angka tersebut sudah satu digit (n <10), kembalikan satu array dari angka tersebut
  • jika tidak (induktif) jumlahnya 10 atau lebih besar; berulang dan tambahkan ke digit pertama

const digits = (n = 0) =>
  n < 10
    ? [ n ]
    : [ ... digits (Math.floor (n / 10)), n % 10 ]

console.log (digits ())        // [ 0 ]
console.log (digits (1))       // [ 1 ]
console.log (digits (12))      // [ 1, 2 ]
console.log (digits (123))     // [ 1, 2, 3 ]
console.log (digits (11234))   // [ 1, 2, 3, 4 ]

console.log (digits (123456789012))
// [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2 ]

2
user633183

Dan yang paling mudah .... num_string.split('').map(Number)

Coba di bawah ini:

console.log((''+123).split('').map(Number))

1
Attersson

Shadow Wizard, versi diperpanjang oleh Orien

var num:Number = 1523;
var digits:Array = [];
var cnt:int = 0;
while (num > 0) {
    var mod:int = num % 10;
    digits.Push(mod * Math.pow(10, cnt))

    num = Math.floor(num / 10);
    cnt++;
}
digits.reverse();
trace(digits);

output: 1000,500,20,3

1
Orien

Tanpa mengonversi ke string:

function toDigits(number) {
    var left;
    var results = [];

    while (true) {
        left = number % 10;
        results.unshift(left);
        number = (number - left) / 10;
        if (number === 0) {
            break;
        }
    }

    return results;
}
1
karaxuna

Dengan ES6, Anda bisa menggunakan Array.from dengan angka bersenar sebagai iterables dan Number sebagai fungsi pemetaan.

const getDigits = n => Array.from(n.toString(), Number);

console.log(getDigits(12345));

1
Nina Scholz

Pendekatan fungsional untuk mendapatkan digit dari number adalah mendapatkan string dari number Anda, membaginya menjadi array (karakter) dan memetakan setiap elemen kembali menjadi angka.

Sebagai contoh:

var number = 123456;

var array = number.toString()
.split('')
.map(function(item, index) {
   return parseInt(item);
});

console.log(array); // returns [1, 2, 3, 4, 5, 6]

Jika Anda juga perlu menjumlahkan semua digit, Anda dapat menambahkan metode reduce() ke kode sebelumnya:

var num = 123456;

var array = num.toString()
.split('')
.map(function(item, index) {
   return parseInt(item);
})
.reduce(function(previousValue, currentValue, index, array) {
  return previousValue + currentValue;
}, 0);

console.log(array); // returns 21

Sebagai alternatif, dengan ECMAScript 2015 (Edisi 6), Anda dapat menggunakan fungsi panah :

var number = 123456;
var array = number.toString().split('').map((item, index) => parseInt(item));
console.log(array); // returns [1, 2, 3, 4, 5, 6]

Jika Anda perlu menjumlahkan semua digit, Anda dapat menambahkan metode reduce() ke kode sebelumnya:

var num = 123456;

var result = num.toString()
.split('')
.map((item, index) => parseInt(item))
.reduce((previousValue, currentValue) => previousValue + currentValue, 0);

console.log(result); // returns 21
0
Imanou Petit

Untuk hanya membagi integer ke dalam digit individualnya dalam urutan yang sama, Ekspresi Reguler adalah apa yang saya gunakan dan sukai karena mencegah peluang kehilangan identitas angka bahkan setelah mereka diubah menjadi string.

Baris kode berikut mengubah integer menjadi string, menggunakan regex untuk mencocokkan setiap digit individu di dalam string dan mengembalikan array dari mereka, setelah itu array itu dipetakan untuk dikonversi kembali ke angka.

const digitize = n => String(n).match(/\d/g).map(Number);

0
SNOSeeds

Anda bisa mencoba ini.

  var num = 99;

  num=num.toString().split("").map(value=>parseInt(value,10)); //output [9,9]

Semoga ini bisa membantu!

0
Aditya Raj
var num = 111,
 separateDigits = num.toString().split(""), i, l = separateDigits.length;

for( i = 0; i < l; ++i ) {
someObject.someMethod( +separateDigits[i] );
}
0
Esailija

Saya menggunakan cara sederhana ini untuk melakukannya.

Untuk membagi angka

var N = 69;
var arr = N.toString().split('').map(Number)
// outputs [6,9]
console.log( arr ); 

Untuk menambahkannya bersama

console.log(arr.reduce( (a,b) => a+b )); // 15
0
makk_bit
function iterateNumber(N, f) {
    let n = N;
    var length = Math.log(n) * Math.LOG10E + 1 | 0;
    for (let i = 0; i < length; i++) {
        const pow = Math.pow(10, length - i - 1)
        let c = (n - (n % pow)) / pow
        f(c, i)
        n %= pow
    }
}
0
user2584621