首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >当使用对象而不是回调函数时,过滤函数是如何工作的?

当使用对象而不是回调函数时,过滤函数是如何工作的?
EN

Stack Overflow用户
提问于 2019-03-01 03:28:04
回答 1查看 58关注 0票数 -1

我试图过滤掉空值,并成功地使用了.filter(String)

['foo','bar','',''].filter(String);
// ['foo','bar']

这是我想要的结果,并按预期工作。

但突然更深入地看了一下:

'' instanceof String // false
'foo' instanceof String // false
''.constructor.prototype // String.prototype
'foo'.constructor.prototype // String.prototype

所以,我们看不出有什么不同。令人惊讶的是这到底是如何工作的。看一下上面的条件,它应该按原样返回['foo','bar','',''],因为所有字符串值。

编辑:

我删除了我的答案,只是因为,我认为它不完全满足:

过滤函数在最后满足布尔值。

Boolean('') // false, so remove
Boolean('foo') // true, so keep it

String是一个构造器-- @Nina Scholz在评论中指出的一个函数。

好吧,它不是@Bergi指出的构造函数。同意。但是现在完全惊讶的是.filter(String)将会是.filter(s=>String(s)) -因为String根本不是一个函数调用。

EN

回答 1

Stack Overflow用户

发布于 2019-03-01 03:51:54

你可以使用不同的构造器,比如BooleanStringArrayObject。该回调返回不同的值,例如

  • Boolean仅返回number值,
  • String返回除空字符串''、包含单个空字符串['']的数组和空数组[]之外的所有值,
  • ArrayObject返回全部,
  • Array,在转换为number后仅返回truthy值。

var array = [-1, 0, 1, NaN, Infinity, '', 'a', 'b', true, false, undefined, null, {}, { a: 1 }, [], [''], [1], [1, 2]];

console.log(array.filter(Boolean));
console.log(array.filter(String));
console.log(array.filter(Array));
console.log(array.filter(Object));
console.log(array.filter(Number));
.as-console-wrapper { max-height: 100% !important; top: 0; }

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54932915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档