Проверяем, что возвращает оператор
typeof
:
const strings = arr.filter(n => typeof n === 'string');
const numbers = arr.filter(n => typeof n === 'number');
const booleans = arr.filter(n => typeof n === 'boolean');
Или, проверяем, что элемент и результат его преобразования в значение интересующего нас типа совпадают:
const strings = arr.filter(n => n === `${n}`);
const numbers = arr.filter(n => n === +n); // в отличие от typeof, отбрасывает NaN
const booleans = arr.filter(n => n === !!n);
Или, группируем массив по имени типа, а дальше извлекаем чего надо:
const groupedByType = arr.reduce((acc, n) => {
const type = n == null ? `${n}` : n.constructor.name.toLowerCase();
(acc[type] = acc[type] || []).push(n);
return acc;
}, {});
const strings = groupedByType.string;