Teilen Sie die Zeichenfolge für den angegebenen Index in zwei Teile und geben Sie beide Teile zurück

79

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

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

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

string.slice gibt nur den extrahierten Teil des Strings zurück. Mit string.split können Sie nur nach Zeichen aufteilen, nicht nach Index. string.substring macht das, was ich brauche, gibt aber nur den Teilstring string.substr sehr ähnlich zurück - gibt immer noch nur den Teilstring zurück

Mike Rifgin
quelle
2
Können Sie die erwartete Ausgabe anzeigen?
Rohan Kumar
2
split()Gibt ein Array von Zeichenfolgen zurück, wie Sie zweifellos wissen. Bitte geben Sie den Code an, der für Sie nicht zu funktionieren scheint.
Wim Ombelets
Ist das nicht nur tausend Trennzeichen?
Ja͢ck
Möchten Sie wirklich teilen oder einfach das Tausendertrennzeichen einfügen? Wenn es nur Letzteres ist, können Sie 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
Bitte upvote: github.com/lodash/lodash/issues/3014
lonewarrior556

Antworten:

104

Versuche dies

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

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

Chamika Sandamal
quelle
14
Die Frage bestand aus 2 Teilen. Solltest du nicht zurückkehren [value.substring(0, index) ,value.substring(index)]?
Manngo
51

ES6 1-Liner

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

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

Alan R. Soares
quelle
3

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

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 Issue Tracker: https://github.com/lodash/lodash/issues/3014

lonewarrior556
quelle
1

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;
 }
Nathan
quelle
1

Sie können 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);
Devashish-Patel
quelle
0

Wenn die Code-Eleganz höher ist als der Performance-Hit von Regex, dann

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

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

Wenn join()dies nicht funktioniert, müssen Sie möglicherweise mapeinen Abschluss verwenden. An diesem Punkt sind die anderen Antworten hier möglicherweise weniger Bytes und Leitungsrauschen.

i336_
quelle
0
function splitText(value, index) {
  if (value.length < index) {return value;} 
  return [value.substring(0, index)].concat(splitText(value.substring(index), index));
}
console.log(splitText('this is a testing peace of text',10));
// ["this is a ", "testing pe", "ace of tex", "t"] 

Für diejenigen, die einen Text mithilfe des Index in ein Array aufteilen möchten.

vcygni
quelle