为什么javascript map函数返回undefined?

我的代码

var arr = ['a','b',1]; var results = arr.map(function(item){ if(typeof item ==='string'){return item;} }); 

这给出了以下结果

 ["a","b",undefined] 

我不想在结果数组中未定义。我该怎么做?

如果该项目不是string,则不会返回任何内容。 在这种情况下,函数返回undefined,你看到的结果。

map函数用于将一个值映射到另一个值,但它看起来实际上是要过滤数组,map函数不适合。

你真正想要的是一个filterfunction。 它需要一个函数,根据是否需要结果数组中的项目返回true或false。

 var arr = ['a','b',1]; var results = arr.filter(function(item){ return typeof item ==='string'; }); 

如果当前元素是一个string则只返回一个值。 也许分配一个空string就足够了:

 var arr = ['a','b',1]; var results = arr.map(function(item){ return (typeof item ==='string') ? item : ''; }); 

当然,如果你想过滤任何非string元素,你不应该使用map() 。 相反,你应该考虑使用filter()函数。

由于ES6 filter支持尖箭头符号(如LINQ):

所以可以归结为以下一行。

 ['a','b',1].filter(item => typeof item ==='string'); 
 var arr = ['a','b',1]; var results = arr.filter(function(item){ if(typeof item ==='string'){return item;} });