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


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

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));


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]]
)
  


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



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;
 }

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);

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.


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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.