为什么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;} });