Benchmark
TL;DR
Der Gewinner dieses Benchmarks ist die einfache alte for-Schleife:
function titleize(str) {
let upper = true
let newStr = ""
for (let i = 0, l = str.length; i < l; i++) {
// Note that you can also check for all kinds of spaces with
// str[i].match(/\s/)
if (str[i] == " ") {
upper = true
newStr += str[i]
continue
}
newStr += upper ? str[i].toUpperCase() : str[i].toLowerCase()
upper = false
}
return newStr
}
// NOTE: you could beat that using charcode and string builder I guess.
Tatsächliche Benchmark
Ich habe die beliebtesten und eindeutigsten Antworten genommen und ein Benchmark mit denen.
Hier ist das Ergebnis auf meinem MacBook pro:
![enter image description here]()
Der Vollständigkeit halber sind hier die verwendeten Funktionen aufgeführt:
str = "the QUICK BrOWn Fox jUMPS oVeR the LAzy doG";
function regex(str) {
return str.replace(
/\w\S*/g,
function(txt) {
return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
}
);
}
function split(str) {
return str.
split(' ').
map(w => w[0].toUpperCase() + w.substr(1).toLowerCase()).
join(' ');
}
function complete(str) {
var i, j, str, lowers, uppers;
str = str.replace(/([^\W_]+[^\s-]*) */g, function(txt) {
return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
});
// Certain minor words should be left lowercase unless
// they are the first or last words in the string
lowers = ['A', 'An', 'The', 'And', 'But', 'Or', 'For', 'Nor', 'As', 'At',
'By', 'For', 'From', 'In', 'Into', 'Near', 'Of', 'On', 'Onto', 'To', 'With'];
for (i = 0, j = lowers.length; i < j; i++)
str = str.replace(new RegExp('\\s' + lowers[i] + '\\s', 'g'),
function(txt) {
return txt.toLowerCase();
});
// Certain words such as initialisms or acronyms should be left uppercase
uppers = ['Id', 'Tv'];
for (i = 0, j = uppers.length; i < j; i++)
str = str.replace(new RegExp('\\b' + uppers[i] + '\\b', 'g'),
uppers[i].toUpperCase());
return str;
}
function firstLetterOnly(str) {
return str.replace(/\b(\S)/g, function(t) { return t.toUpperCase(); });
}
function forLoop(str) {
let upper = true;
let newStr = "";
for (let i = 0, l = str.length; i < l; i++) {
if (str[i] == " ") {
upper = true;
newStr += " ";
continue;
}
newStr += upper ? str[i].toUpperCase() : str[i].toLowerCase();
upper = false;
}
return newStr;
}
Ich habe den Prototyp absichtlich nicht geändert, da ich dies für eine sehr schlechte Praxis halte und ich denke, dass wir eine solche Praxis in unseren Antworten nicht fördern sollten. Dies ist nur für kleine Codebasen in Ordnung, wenn man der einzige ist, der daran arbeitet.
Wenn Sie einen anderen Weg zu diesem Benchmark hinzufügen möchten, kommentieren Sie bitte einen Link zu der Antwort!
1 Stimmen
Es gibt verschiedene Methoden, haben wir einige Leistungsstatistiken?
1 Stimmen
@theAnubhav ja wir haben jetzt eine Benchmark
2 Stimmen
Wir schreiben das Jahr 2022, und die Browser verfügen immer noch nicht über eine native Funktion für diese Aufgabe.
1 Stimmen
Diese Schreibweise ist zu 100 % sprach-, orts- und kulturabhängig.
0 Stimmen
Ich möchte, dass einer der Testfälle für die Lösung "Comhrá i mBÁC le Seán Nguyen" lautet - viel Glück dabei! Im Grunde genommen ist die Vorstellung, dass ein Computer so etwas wie "Titelverhüllung" leisten kann, wahrscheinlich hoffnungslos, selbst wenn er über riesige Mengen an Ressourcen für maschinelles Lernen verfügt.