Чтобы ответить на вопрос, да, вы можете использовать for..in
со строками.Правда, в большинстве случаев вы не должны.
for(i in X)
работает следующим образом:
- , если X не является объектом, преобразуйте его в соответствующую оболочку (aчисло для
Number
, строка для String
) - для каждого "перечисляемого свойства" X, присвойте его имя i и запустите тело цикла
Строки преобразуются в String
объекты, и, как вы можете видеть в консоли, они похожи на массивы: они имеют числовые свойства от 0 до длины - 1, и каждое свойство содержит соответствующий символ:
То есть, приведенная выше логика прекрасно работает со строками.
Однако, если вы хотите итерировать только строку char-by-char, есть более прямой способ сделать то же самое: цикл for..of
.
for(a of X)
выбирает каждый элемент (не свойство) из X (который может быть строкой, массивом или любым «итерируемым» объектом) и присваивает его «a».С for..of
ваш код может быть изменен следующим образом:
function firstNonRepeatingLetter(str) {
const lowerStr = str.toLowerCase();
for (let char of lowerStr) {
if (lowerStr.lastIndexOf(char) === lowerStr.indexOf(char))
return char;
}
return "";
}