Teilt den String bei gegebenem Index in zwei Teile auf und gibt beide Teile zurück

Lesezeit: 3 Minuten

Benutzer-Avatar
Mike Rifgin

Ich habe eine Zeichenfolge, die ich auf einen bestimmten Index aufteilen und dann beide Teile, getrennt durch ein Komma, zurückgeben muss. Zum Beispiel:

string: 8211 = 8,211
        98700 = 98,700

Ich muss also in der Lage sein, die Zeichenfolge an einem bestimmten Index aufzuteilen und dann beide Hälften der Zeichenfolge zurückzugeben. Eingebaute Methoden scheinen die Teilung durchzuführen, geben aber nur einen Teil der Teilung zurück.

string.slice gibt nur einen extrahierten Teil der Zeichenfolge zurück. string.split erlaubt Ihnen nur, auf Zeichen aufzuteilen, nicht auf Index string.substring tut, was ich brauche, gibt aber nur die Teilzeichenfolge zurück

  • Können Sie die erwartete Ausgabe zeigen?

    – Rohan Kumar

    8. Mai 2013 um 13:19 Uhr

  • split() gibt ein Array von Strings zurück, wie Sie zweifellos wissen. Bitte geben Sie den Code ein, der bei Ihnen nicht zu funktionieren scheint.

    – Wim Ombelets

    8. Mai 2013 um 13:19 Uhr

  • Ist das nicht nur ein Tausendertrennzeichen?

    – Jack

    8. Mai 2013 um 13:19 Uhr

  • Möchten Sie wirklich aufteilen oder nur das Tausendertrennzeichen einfügen? Wenn es nur letzteres ist, könntest du Folgendes versuchen: var n='1234567890'; alert(n.replace(/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g,'$&,'));. Ref: safaribooksonline.com/library/view/regular-expressions-cookbook/…

    – Manngo

    8. April 2018 um 22:35 Uhr


  • bitte upvoten: github.com/lodash/lodash/issues/3014

    – einsamer Krieger556

    23. April 2020 um 20:47 Uhr

Benutzer-Avatar
Chamika Sandamale

Versuche dies

function split_at_index(value, index)
{
 return value.substring(0, index) + "," + value.substring(index);
}

console.log(split_at_index('3123124', 2));

  • Die gestellte Frage besteht aus 2 Teilen. Solltest du nicht zurückkehren [value.substring(0, index) ,value.substring(index)]?

    – Manngo

    8. April 2018 um 22:29 Uhr

Benutzer-Avatar
Alan R. Soares

ES6 1-Zeilen

// :: splitAt = (number, any[] | string) => [any[] | string, any[] | string]
const splitAt = (index, xs) => [xs.slice(0, index), xs.slice(index)]

console.log(
  splitAt(1, 'foo'), // ["f", "oo"]
  splitAt(2, [1, 2, 3, 4]) // [[1, 2], [3, 4]]
)
  

  • Warum die Präferenz, zwei Funktionen zu curryen, anstatt nur eine Funktion zu haben, die zwei Parameter akzeptiert?

    – Andrés

    3. Februar um 15:14 Uhr

  • @Andris das wird überhaupt nicht benötigt. Ich habe das Beispiel ohne Curry aktualisiert

    – Alan R. Soares

    15. Februar um 22:09 Uhr

Benutzer-Avatar
einsamer556

Sie können es leicht erweitern, um es auf mehrere Indizes aufzuteilen und ein Array oder eine Zeichenfolge zu nehmen

const splitOn = (slicable, ...indices) =>
  [0, ...indices].map((n, i, m) => slicable.slice(n, m[i + 1]));

splitOn('foo', 1);
// ["f", "oo"]

splitOn([1, 2, 3, 4], 2);
// [[1, 2], [3, 4]]

splitOn('fooBAr', 1, 4);
//  ["f", "ooB", "Ar"]

Lodash-Problemverfolgung: https://github.com/lodash/lodash/issues/3014

Typoskript:

const splitOn: {
  <T = string>(s: T, ...i: number[]): T[];
  <T extends any[]>(s: T, ...i: number[]): T[];
} = <T>(slicable: string | T[], ...indices: number[]) =>
  [0, ...indices].map((n, i, m) => slicable.slice(n, m[i + 1]));

Benutzer-Avatar
NullPointerException

Sie können auch den Zahlenformatierer JS verwenden, der unter verfügbar ist

https://code.google.com/p/javascript-number-formatter/

Formatoptionen

http://jsfiddle.net/chauhangs/hUE3h/

  format("##,###.", 98700)
  format("#,###.", 8211)

Etwas wie das?…

 function stringConverter(varString, varCommaPosition)
 {
   var stringArray = varString.split("");
   var outputString = '';
   for(var i=0;i<stringArray.length;i++)
   {
     if(i == varCommaPosition)
      {
        outputString = outputString + ',';
      }

     outputString = outputString + stringArray[i];
   }  

   return outputString;
 }

Du kannst es auch so machen.
https://jsfiddle.net/Devashish2910/8hbosLj3/1/#&togetherjs=iugeGcColp

var str, result;
str = prompt("Enter Any Number");

var valueSplit = function (value, length) {
    if (length < 7) {
        var index = length - 3;
        return str.slice(0, index) + ',' + str.slice(index);
    }
    else if (length < 10 && length > 6) {
        var index1, index2;
        index1 = length - 6;
        index2 = length - 3;
        return str.slice(0,index1) + "," + str.slice(index1,index2) + "," + str.slice(index2);
    }
}

result = valueSplit(str, str.length);
alert(result);

Benutzer-Avatar
i336_

Wenn Code-Eleganz höher eingestuft wird als der Performance-Hit von Regex, dann

'1234567'.match(/^(.*)(.{3})/).slice(1).join(',')
=> "1234,567"

Es gibt viel Raum, um die Regex weiter zu modifizieren, um genauer zu sein.

Wenn join() funktioniert nicht, dann müssen Sie möglicherweise verwenden map mit einer Schließung, an welcher Stelle die anderen Antworten hier möglicherweise weniger Bytes und Leitungsrauschen sind.

1227890cookie-checkTeilt den String bei gegebenem Index in zwei Teile auf und gibt beide Teile zurück

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy