首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.filter(v => !!v)

.filter(v => !!v)
EN

Stack Overflow用户
提问于 2018-01-02 17:50:39
回答 4查看 1.4K关注 0票数 2

我有一个应用程序,它可以用键值对将tex文件转换为JavaScript对象。关键字是单词,值是它出现在文本文件中的次数。让我们一起经历一下:

代码语言:javascript
复制
FormatText.prototype.toDowncase = function() {
  return this._data = this._data.toLowerCase(); 
};

这使单词变成小写。

代码语言:javascript
复制
FormatText.prototype.deleteWords = function() {
  return this._data = this._data.replace(/\W/g, " ");
};

这将用空格替换所有非单词。

代码语言:javascript
复制
FormatText.prototype.splitWords = function() {
  return this._data = this._data.split(/\s+/);
};

这将在数组中转换字符串,并在每个分隔符处拆分。

代码语言:javascript
复制
FormatText.prototype.filterEntries = function() {
  return this._data = this._data.filter(v => !!v);
};

这个上面我不知道它是干什么的。

代码语言:javascript
复制
FormatText.prototype.countWords = function() {
  return this._data = this._data.reduce((dict, v) => {dict[v] = v in dict ? dict[v] + 1 : 1; return dict}, {});
}

可以有人解释一下这个,但是我会试一试:

该方法接受数组,并使用两个参数传递方法“reduce”。它计算每个单词出现多少次,并返回这个问题开头描述的“键值”对的对象。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-01-02 17:56:35

v => !!v的意思是取v,并通过应用不超过两次将其强制为布尔类型。因此,过滤器函数基本上是从this._data中移除任何falsey值(0,null,未定义)。

countWords正在计算每个单词在this._data中发生的次数--它正在遍历数组,如果之前遇到了这个单词,它将向计数中添加1,如果之前没有遇到该单词,则返回1。它返回一个以单词作为键,计数为值的对象。

请注意,这些函数将this._data的类型从字符串更改为数组,更改为对象。如果您运行同一方法两次,则可能会出现错误。

票数 2
EN

Stack Overflow用户

发布于 2018-01-02 18:09:04

为什么不直接返回值,而不是没有,就像

代码语言:javascript
复制
v => v

因为为了过滤值,必须将值强制为布尔值。

来自Array#filter

描述 filter()为数组中的每个元素调用一次提供的callback函数,并构造一个callback返回true的所有值的新数组。只对已赋值的数组的索引调用callback;对已删除或从未被赋值的索引调用它。没有通过callback测试的数组元素被简单跳过,并且不包含在新的数组中。

票数 2
EN

Stack Overflow用户

发布于 2019-09-18 09:24:32

在这种情况下,双感叹号是无用的:然后filter(callback)中的回调返回的值将自动强制为布尔值,因此不需要使用双感叹号。以下几行是等价的:

代码语言:javascript
复制
.filter(v => !!v)
.filter(v => v)
.filter(Boolean)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48065557

复制
相关文章

相似问题

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