我有一个应用程序,它可以用键值对将tex文件转换为JavaScript对象。关键字是单词,值是它出现在文本文件中的次数。让我们一起经历一下:
FormatText.prototype.toDowncase = function() {
return this._data = this._data.toLowerCase();
};这使单词变成小写。
FormatText.prototype.deleteWords = function() {
return this._data = this._data.replace(/\W/g, " ");
};这将用空格替换所有非单词。
FormatText.prototype.splitWords = function() {
return this._data = this._data.split(/\s+/);
};这将在数组中转换字符串,并在每个分隔符处拆分。
FormatText.prototype.filterEntries = function() {
return this._data = this._data.filter(v => !!v);
};这个上面我不知道它是干什么的。
FormatText.prototype.countWords = function() {
return this._data = this._data.reduce((dict, v) => {dict[v] = v in dict ? dict[v] + 1 : 1; return dict}, {});
}可以有人解释一下这个,但是我会试一试:
该方法接受数组,并使用两个参数传递方法“reduce”。它计算每个单词出现多少次,并返回这个问题开头描述的“键值”对的对象。
发布于 2018-01-02 17:56:35
v => !!v的意思是取v,并通过应用不超过两次将其强制为布尔类型。因此,过滤器函数基本上是从this._data中移除任何falsey值(0,null,未定义)。
countWords正在计算每个单词在this._data中发生的次数--它正在遍历数组,如果之前遇到了这个单词,它将向计数中添加1,如果之前没有遇到该单词,则返回1。它返回一个以单词作为键,计数为值的对象。
请注意,这些函数将this._data的类型从字符串更改为数组,更改为对象。如果您运行同一方法两次,则可能会出现错误。
发布于 2018-01-02 18:09:04
为什么不直接返回值,而不是没有,就像
v => v因为为了过滤值,必须将值强制为布尔值。
描述
filter()为数组中的每个元素调用一次提供的callback函数,并构造一个callback返回true的所有值的新数组。只对已赋值的数组的索引调用callback;对已删除或从未被赋值的索引调用它。没有通过callback测试的数组元素被简单跳过,并且不包含在新的数组中。
发布于 2019-09-18 09:24:32
在这种情况下,双感叹号是无用的:然后filter(callback)中的回调返回的值将自动强制为布尔值,因此不需要使用双感叹号。以下几行是等价的:
.filter(v => !!v)
.filter(v => v)
.filter(Boolean)https://stackoverflow.com/questions/48065557
复制相似问题