我的代码为什么javascript map函数返回undefined?
var arr = ['a','b',1];
var results = arr.map(function(item){
if(typeof item ==='string'){return item;}
});
这得出以下结果
["a","b",undefined]
我不想在结果array.How我能做到这一点不确定?
我的代码为什么javascript map函数返回undefined?
var arr = ['a','b',1];
var results = arr.map(function(item){
if(typeof item ==='string'){return item;}
});
这得出以下结果
["a","b",undefined]
我不想在结果array.How我能做到这一点不确定?
如果项目不是字符串,则不返回任何内容。在这种情况下,函数返回undefined,你在结果中看到了什么。
映射函数用于将一个值映射到另一个值,但它看起来实际上是要过滤该映射函数不适合的数组。
你真正想要的是一个filter函数。它需要一个函数,根据是否需要结果数组中的项来返回true或false。
var arr = ['a','b',1];
var results = arr.filter(function(item){
return typeof item ==='string';
});
啊......我不知道有一个过滤功能。谢谢。 –
这很有意义。我没有.map'我是.filter'ing ...你怎么知道的?! O.o Thanks ^。^ – DigitalDesignDj
非常符合逻辑谢谢@Ikke –
var arr = ['a','b',1];
var results = arr.filter(function(item){
if(typeof item ==='string'){return item;}
});
由于ES6 filter
支持尖箭头符号(如LINQ):
所以可以归结为下列单行。
['a','b',1].filter(item => typeof item ==='string');
过滤器适用于未修改项目的特定情况。 但是在很多情况下,当你使用地图时,你想对传递的项目进行一些修改。
,如果这是你的意图,你可以使用reduce:
var arr = ['a','b',1];
var results = arr.reduce((results, item) => {
if (typeof item === 'string') results.push(modify(item)) // modify is a fictitious function that would apply some change to the items in the array
return results
}, [])
因为你,除非它是一个字符串不返回任何东西。因此,最后一项返回'undefined'。如果不是字符串,你希望返回什么?一个空字符串? – BenM
@BenM如果它不是一个字符串我不想返回任何东西,甚至没有定义。 –
看起来像我使用错误的方法来做到这一点。我将按照建议使用过滤器。 –