Ви нічого не повертаєте, якщо елемент не є рядком. У цьому випадку функція повертається невизначено, що ви бачите в результаті.
Функція map використовується для зіставлення одного значення іншому, але, схоже, ви хочете фільтрувати масив, для якого функція карти не підходить.
Те, що ви насправді хочете, - це функція фільтра . Потрібна функція, яка повертає true чи false, залежно від того, хочете ви елемент у масиві, що виходить, чи ні.
var arr = ['a','b',1];
var results = arr.filter(function(item){
return typeof item ==='string';
});
undefined. Що ви очікуєте повернути, якщо це не рядок? Порожній рядок?