Meu código
var arr = ['a','b',1];
var results = arr.map(function(item){
if(typeof item ==='string'){return item;}
});
Isso dá os seguintes resultados
["a","b",undefined]
Não quero indefinido na matriz de resultados. Como posso fazer isso?
javascript
Akshat Jiwan Sharma
fonte
fonte
undefined
. O que você espera retornar se não for uma string? Uma string vazia?Respostas:
Você não está retornando nada no caso de o item não ser uma string. Nesse caso, a função retorna indefinido, o que você está vendo no resultado.
A função de mapa é usada para mapear um valor para outro, mas parece que você realmente deseja filtrar a matriz, para a qual uma função de mapa não é adequada.
O que você realmente quer é uma função de filtro . Leva uma função que retorna verdadeiro ou falso com base em se você deseja ou não o item na matriz resultante.
fonte
O filtro funciona para este caso específico em que os itens não são modificados. Mas em muitos casos, ao usar o mapa, você deseja fazer algumas modificações nos itens passados.
se essa for sua intenção, você pode usar reduzir :
fonte
map
resulta em matrizes comundefined
.filter
apenas retorna o item ou não. isso é perfeitoUma vez que ES6
filter
suporta notação de seta pontiaguda (como LINQ):Portanto, pode ser resumido a seguir uma linha.
fonte
Minha solução seria usar o filtro após o mapa.
Isso deve suportar todos os tipos de dados JS.
exemplo:
fonte
Você só retorna um valor se o elemento atual for um
string
. Talvez atribuir uma string vazia seja suficiente:Claro, se você quiser filtrar quaisquer elementos que não sejam string, você não deve usar
map()
. Em vez disso, você deve tentar usar afilter()
função.fonte
fonte
Você pode implementar como uma lógica abaixo. Suponha que você queira uma matriz de valores.
fonte