Mi código
var arr = ['a','b',1];
var results = arr.map(function(item){
if(typeof item ==='string'){return item;}
});
Esto da los siguientes resultados
["a","b",undefined]
No quiero indefinido en la matriz de resultados, ¿cómo puedo hacerlo?
javascript
Akshat Jiwan Sharma
fuente
fuente
undefined
. ¿Qué esperas devolver si no es una cadena? ¿Una cuerda vacía?Respuestas:
No devuelve nada en el caso de que el artículo no sea una cadena. En ese caso, la función devuelve undefined, lo que está viendo en el resultado.
La función de mapa se usa para asignar un valor a otro, pero parece que realmente desea filtrar la matriz, para lo cual una función de mapa no es adecuada.
Lo que realmente desea es una función de filtro . Se necesita una función que devuelva verdadero o falso en función de si desea o no el elemento en la matriz resultante.
fuente
El filtro funciona para este caso específico donde los elementos no se modifican. Pero en muchos casos, cuando usa el mapa, desea realizar alguna modificación en los elementos pasados.
si esa es su intención, puede usar reduce :
fuente
map
resultados en matrices conundefined
.filter
Solo devuelve el artículo o no. esto es perfectoDado que ES6
filter
admite la notación de flechas puntiagudas (como LINQ):Por lo tanto, puede reducirse a seguir una sola línea.
fuente
Mi solución sería usar un filtro después del mapa.
Esto debería admitir todos los tipos de datos JS.
ejemplo:
fuente
Solo devuelve un valor si el elemento actual es un
string
. Quizás asignar una cadena vacía de lo contrario será suficiente:Por supuesto, si desea filtrar cualquier elemento que no sea una cadena, no debe usar
map()
. Más bien, debería considerar el uso de lafilter()
función.fuente
fuente
Puede implementar como una lógica siguiente. Suponga que quiere una matriz de valores.
fuente