Jak przetwarzać każdą literę tekstu (z testami porównawczymi)
https://jsperf.com/str-for-in-of-foreach-map-2
dla
Klasyczny i zdecydowanie najbardziej wydajny . Powinieneś iść z tym, jeśli planujesz używać go w algorytmie krytycznym pod względem wydajności lub że wymaga on maksymalnej kompatybilności z wersjami przeglądarki.
for (var i = 0; i < str.length; i++) {
console.info(str[i]);
}
dla ... z
for ... of to nowy ES6 dla iteratora. Obsługiwane przez większość nowoczesnych przeglądarek. Jest to bardziej atrakcyjne wizualnie i mniej podatne na błędy w pisaniu. Jeśli wybierasz ten w aplikacji produkcyjnej, prawdopodobnie powinieneś użyć transpilatora takiego jak Babel .
let result = '';
for (let letter of str) {
result += letter;
}
dla każdego
Podejście funkcjonalne . Zatwierdzony przez Airbnb . Największym minusem robienia tego w ten sposób jest to split()
, że tworzy nową tablicę do przechowywania każdej pojedynczej litery łańcucha.
Dlaczego? To wymusza naszą niezmienną zasadę. Radzenie sobie z czystymi funkcjami zwracającymi wartości jest łatwiejsze do uzasadnienia niż skutki uboczne.
// ES6 version.
let result = '';
str.split('').forEach(letter => {
result += letter;
});
lub
var result = '';
str.split('').forEach(function(letter) {
result += letter;
});
Poniżej znajdują się te, których nie lubię.
dla w
W przeciwieństwie do ... z, zamiast litery dostajesz indeks listów. Działa dość źle.
var result = '';
for (var letterIndex in str) {
result += str[letterIndex];
}
mapa
Podejście funkcyjne, co jest dobre. Jednak mapa nie jest do tego przeznaczona. Należy go użyć, gdy trzeba zmienić wartości wewnątrz tablicy, co nie ma miejsca.
// ES6 version.
var result = '';
str.split('').map(letter => {
result += letter;
});
lub
let result = '';
str.split('').map(function(letter) {
result += letter;
});
for(const c of str) { ... }
. Więcej na ten temat poniżej w dość szczegółowej, ale niewystarczająco pozytywnej odpowiedzi. PS: Link @ ARJUN nie działa dla mnie.