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
javascript
Mike Rifgin
quelle
quelle
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.var n='1234567890'; alert(n.replace(/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g,'$&,'));
. Ref: safaribooksonline.com/library/view/regular-expressions-cookbook/…Antworten:
Versuche dies
function split_at_index(value, index) { return value.substring(0, index) + "," + value.substring(index); } console.log(split_at_index('3123124', 2));
quelle
[value.substring(0, index) ,value.substring(index)]
?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]] )
quelle
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
quelle
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)
quelle
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; }
quelle
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);
quelle
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öglicherweisemap
einen Abschluss verwenden. An diesem Punkt sind die anderen Antworten hier möglicherweise weniger Bytes und Leitungsrauschen.quelle
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.
quelle