Обычно я бы просто использовал что-то вроде str[i]
.
А если str = "☀️????????"
?
str[i]
не работает. for (x of str) console.log(x)
тоже не работает. Он выводит всего 4 символа, хотя в строке явно только 2 смайлика.
Каков наилучший способ перебрать каждый символ, который я вижу в строке (и новые строки, я думаю), и ничего больше?
Идеальным решением будет возвращать массив из 2 символов: 2 смайлика и ничего больше. Заявленный дубликат и множество других решений, которые я нашел, не соответствуют этому критерию.
for...of
, который, как я указал, не работает в этом случае. Но, пожалуйста, поправьте меня, если я ошибаюсь! - person thedayturns   schedule 22.04.2016for..of
не может быть заполнен полифиллом. Предлагаемые ответы показывают, как разбить строку на кодовые точки. Если вы не хотите заполнять его полифилом, просто используйте его как бесплатную функцию. - person Raymond Chen   schedule 22.04.2016toCodePoints
возвращает массив длины 4. - person thedayturns   schedule 22.04.2016for (x in str) console.log(x)
печатает шесть символов (плюс дополнительный мусор, не относящийся к обсуждению), а не четыре, которые вы изначально заявляли. Это потому, что строка"☀️????????"
состоит из шести кодовых единиц:"\u2600\ufe0f\ud83d\ude4c\ud83c\udffc"
. Это разбивается на четыре кодовых точки: U+2600 (ЧЕРНОЕ СОЛНЦЕ С ЛУЧАМИ), U+FE0F (ВАРИАНТ 16), U+1F64C (ЧЕЛОВЕК, ПОДНИМАЮЩИЙ ОБЕ РУКИ В ПРАЗДНОВАНИИ) и U+1F3FC (ЭМОДЖИ-МОДИФИКАТОР ФИТЦПАТРИКА, ТИП 3). . Похоже, вы хотите взломать графемы, что является более сложной проблемой. - person Raymond Chen   schedule 23.04.2016for (x of str)
, а неx in str
именно потому, чтоof
разбивается на кодовые точки, а не на символы. Графемы оказались здесь волшебным словом — как только я погуглил об этом, я быстро нашел достойную библиотеку для выполнения этой работы. - person thedayturns   schedule 23.04.2016