Вот такая колбаса вернёт массив, где только «правильные» числа:
[10, 20, 30, 50, 235, 3000].filter(n => !!~[1,2,5].indexOf(+n.toString()[0]))
// результат [ 10, 20, 50, 235 ]
Вывод на экран пилите самостоятельно.
Метод массива
filter()
оставит только те элементы, для которых функция внутри вернёт
true
. Функция аргумент (в скобках) применяется по очереди к каждому элементу массива (числу).
Переводит число в строку, забирает первй символ (первую цифру) и переводит опять в число (оператор
+
).
indexOf()
ищет полученную первую цифру в массиве допустимых: 1, 2, 5 и возврашает его индекс (0, 1 или 2) или -1, если не найдено.
Битовое инвертирование
~
из -1 сделает 0. А из любого другого числа (из 0, 1 или 2) – сделает ненулевое число. Два
!!
это два булевых оператора отрицания. Из аргумента делают
true
или
false
. Из 0 получится
false
, из любого другого
true
. Таким образом связка
!!~
и
indexOf()
даёт ответ на вопрос найден или не найден?