Вот такая колбаса вернёт массив, где только «правильные» числа:
[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() даёт ответ на вопрос найден или не найден?