Мой код
var arr = ['a','b',1];
var results = arr.map(function(item){
if(typeof item ==='string'){return item;}
});
Это дает следующие результаты
["a","b",undefined]
Я не хочу, чтобы в массиве результатов содержалось значение undefined, как это сделать?
javascript
Акшат Дживан Шарма
источник
источник
undefined
. Что вы ожидаете вернуть, если это не строка? Пустая строка?Ответы:
Вы ничего не возвращаете, если элемент не является строкой. В этом случае функция возвращает undefined, что вы видите в результате.
Функция карты используется для сопоставления одного значения с другим, но похоже, что вы действительно хотите отфильтровать массив, для чего функция карты не подходит.
На самом деле вам нужна функция фильтра . Требуется функция, которая возвращает истину или ложь в зависимости от того, нужен ли вам элемент в результирующем массиве или нет.
источник
Фильтр работает для этого конкретного случая, когда элементы не изменяются. Но во многих случаях, когда вы используете карту, вы хотите внести некоторые изменения в переданные элементы.
если это ваше намерение, вы можете использовать сокращение :
источник
map
результаты в массивах сundefined
.filter
только возвращает товар или нет. это идеальноПоскольку ES6
filter
поддерживает обозначение остроконечных стрелок (например, LINQ):Таким образом, это можно свести к следующему однострочному.
источник
Моим решением было бы использовать фильтр после карты.
Это должно поддерживать все типы данных JS.
пример:
источник
Вы возвращаете значение, только если текущий элемент - это
string
. Возможно, в противном случае будет достаточно присвоения пустой строки:Конечно, если вы хотите отфильтровать любые нестроковые элементы, вам не следует использовать
map()
. Скорее вам следует изучить возможность использованияfilter()
функции.источник
источник
Вы можете реализовать следующую логику. Предположим, вам нужен массив значений.
источник