it-swarm.com.de

JavaScript-Nummer In einzelne Ziffern aufgeteilt

Hallo, ich versuche, ein mathematisches Problem zu lösen, bei dem ich eine Nummer z. 45 oder 111 und teilen dann die Nummer in separate Ziffern auf, z. 4 5 oder 1 1 1. Ich werde dann jede Zahl in einem var speichern, um eine Methode auszuführen. Hat jemand keine, wie man eine Zahl in einzelne Ziffern zerlegt. 

Zum Beispiel habe ich eine Schleife, die auf einem Array läuft: 

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

Für jede Zahl möchte ich ihre Ziffern teilen und addieren?

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]
 */ 

UPDATE: Berechnung einer Summe

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

Sie können dies auch "mathematisch" tun, ohne die Zahl als Zeichenfolge zu behandeln:

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

Ein Vorteil, den ich sehen kann, ist, dass Sie parseInt() nicht für jede Ziffer ausführen müssen, sondern dass Sie die tatsächlichen Ziffern als numerische Werte behandeln.

Live Testfall .

17
Shadow Wizard

Ich werde eine Variation einer bereits gegebenen Antwort angeben, damit Sie einen anderen Ansatz sehen können, bei dem der numerische Typ die ganze Zeit erhalten bleibt:

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

Ich habe eine Technik wie den oben genannten verwendet, um eine Zahl in römische Zahlen umzuwandeln. Dies ist eine meiner bevorzugten Methoden, eine Programmiersprache zu lernen, die mir nicht vertraut ist. So habe ich beispielsweise vor 10 Jahren einen Weg gefunden, Zahlen in römische Zahlen mit Tcl zu konvertieren: http://code.activestate.com/recipes/68379-conversion-to-roman-numerals/

Die vergleichbaren Zeilen in meinem Tcl-Skript lauten:

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

Dies ist die kürzeste, die ich gefunden habe, obwohl die Ziffern als Zeichenfolgen zurückgegeben werden:

let num = 12345;

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

Oder verwenden Sie dies, um ganze Zahlen zurückzuholen:

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

Sie können Strings anstelle von Zahlen bearbeiten, um dies zu erreichen. Sie können es so machen 

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

Dies gibt ein Array von Strings ['1','1','1'] zurück, mit dem Sie die parseInt-Methode durchlaufen und aufrufen können.

parseInt('1') === 1

Wenn Sie die Summe der einzelnen Ziffern wünschen, können Sie die Reduzierungsfunktion (implementiert von Javascript 1.8) auf diese Weise verwenden

(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

Eine lustige Einführung in die Rekursion. Diese Antwort nimmt eine Zahl und gibt ein Array mit Zahlenstellen zurück. Es macht nicht als Zwischenschritt die Zahl in einen String umwandeln.

Gegebener n = 1234,

  • n % 10 gibt die erste (rechtsfeuchte) Ziffer zurück, 4
  • n / 10 gibt 123 mit einem Rest zurück
  • Mit Math.floor können wir den Rest abhacken
  • Durch Wiederholen dieser Schritte können wir das gesamte Ergebnis bilden

Jetzt müssen wir nur die Rekursionsbedingung aufbauen,

  • Wenn die Zahl bereits eine einzelne Ziffer ist (n <10), geben Sie ein Array-Einzelzeichen der Ziffer zurück
  • ansonsten (induktiv) ist die Zahl 10 oder größer; wiederholen und vor der ersten Ziffer stehen

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

Und das einfachste .... num_string.split('').map(Number)

Versuchen Sie es unten:

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

Schatten Wizard, erweiterte Version von 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);

ausgabe: 1000,500,20,3

1
Orien

Ohne Konvertierung in einen 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

Trennen Sie jeweils 2 Parameter. 

function separator(str,sep) {
    var output = '';
    for (var i = str.length; i > 0; i-=2) {
        var ii = i-1;
        if(output) {
            output = str.charAt(ii-1)+str.charAt(ii)+sep+output;
        } else {
            output = str.charAt(ii-1)+str.charAt(ii);
        }            
    }
    return output;
}
console.log(separator('123456',':')); //Will return 12:34:56
1
fdrv

Mit ES6 können Sie Array.from mit einer String-Nummer als iterables und Number als Abbildungsfunktion verwenden.

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

console.log(getDigits(12345));

1
Nina Scholz

Ein funktionaler Ansatz, um Ziffern aus einer number zu erhalten, wäre, eine string von Ihrer number zu erhalten, sie in eine array (von Zeichen) aufzuteilen und jedes Element einer Zahl zuzuordnen.

Zum Beispiel:

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]

Wenn Sie auch alle Ziffern summieren müssen, können Sie die Methode reduce() an den vorherigen Code anhängen:

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

Alternativ können Sie mit ECMAScript 2015 (6. Ausgabe) Pfeilfunktionen verwenden:

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

Wenn Sie alle Ziffern summieren müssen, können Sie die reduce()-Methode an den vorherigen Code anhängen:

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

javascript hat eine Funktion dafür und Sie können es leicht verwenden.

console.log(new Intl.NumberFormat().format(number));

beispielsweise :

console.log(new Intl.NumberFormat().format(2334325443534));
==> 2,334,325,443,534
0

Sie können dies in einer einzelnen Zeile tun, jede Ziffer trennen und dann addieren:

var may = 12987;
var sep = (""+may).split("").map(n=>+n).reduce((a,b)=>a+b);
0
Stst

('' + 123456789).split('').map( x => +x ).reduce( (a,b) => a+b ) === 45

wahr

oder ohne karte

('' + 123456789).split('').reduce( (a,b) => (+a)+(+b) ) === 45

wahr

0
gkelly

Um eine ganze Zahl in der gleichen Reihenfolge in ihre einzelnen Ziffern aufzuteilen, habe ich den regulären Ausdruck verwendet und bevorzugt, da er verhindert, dass die Identität der Zahlen verloren geht, selbst nachdem sie in Zeichenfolgen konvertiert wurden.

In der folgenden Codezeile wird die Ganzzahl in eine Zeichenfolge konvertiert. Mithilfe von Regex werden einzelne Ziffern in der Zeichenfolge abgeglichen und ein Array von diesen zurückgegeben. Anschließend wird dieses Array zugeordnet, um wieder in Zahlen konvertiert zu werden.

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

0
SNOSeeds

Das ist meine kurze Lösung .. mit Summe der Zahlen

    function sum (num) {
    let sNumber = num
        .toString()
        .split('')
        .reduce((el1, el2) => {
            return Number(el1) + Number(el2)
        }, 0)
        return sNumber
     }

console.log (sum (123))
console.log (Summe (456))

0
Todor Markov

Sie können es versuchen.

  var num = 99;

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

Hoffe das hat geholfen!

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

Ich habe diesen einfachen Weg benutzt.

Um die Ziffern zu teilen

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

Um sie zusammenzufügen

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