这个字符串拆分操作中的“过滤器”调用是什么?

What is the `filter` call for in this string split operation?

我有一行遗留代码用于在分号上拆分字符串:

var adds = emailString.split(/;+/).filter(Boolean);

filter(Boolean) 部分可以做什么?

filter(Boolean) 只会保留数组中的真实值。

filter 需要一个回调函数,通过提供 Boolean 作为参考,它将被调用为 Boolean(e) 数组中的每个元素 e 和结果的操作将 returned 到 filter.

如果 returned 值为 true 元素 e 将保留在数组中,否则它不会包含在数组中。

例子

var arr = [0, 'A', true, false, 'tushar', '', undefined, null, 'Say My Name'];
arr = arr.filter(Boolean);
console.log(arr); // ["A", true, "tushar", "Say My Name"]


代码中

var adds = emailString.split(/;+/).filter(Boolean);

我的猜测是字符串 emailString 包含由 ; 分隔的值,其中分号可以出现多次。

> str = 'a@b.com;;;;c@d.com;;;;dd@dd.com;'
> str.split(/;+/)
< ["a@b.com", "c@d.com", "dd@dd.com", ""]

> str.split(/;+/).filter(Boolean)
< ["a@b.com", "c@d.com", "dd@dd.com"]

这里split就这个return["a@b.com", "c@d.com", "dd@dd.com", ""].