在这个字符串拆分操作中,`filter`调用是什么?

Pro*_*ofK -1 javascript ecmascript-5

我有一行遗留代码来分割半冒号的字符串:

var adds = emailString.split(/;+/).filter(Boolean);
Run Code Online (Sandbox Code Playgroud)

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

Tus*_*har 5

filter(Boolean) 只会保持数组中的truthy值.

filter期望一个回调函数,通过提供Boolean作为参考,它将被调用为数组中的Boolean(e)每个元素e,并且将返回操作的结果filter.

如果返回的值是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"]
Run Code Online (Sandbox Code Playgroud)


在代码中

var adds = emailString.split(/;+/).filter(Boolean);
Run Code Online (Sandbox Code Playgroud)

我的猜测是字符串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"]
Run Code Online (Sandbox Code Playgroud)

下面split就这将返回["a@b.com", "c@d.com", "dd@dd.com", ""].