3

不懂就问,对数组操作时,返回所有真值用 testArray.map(Boolean) 是什么写法

 3 years ago
source link: https://www.v2ex.com/t/797720
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
不懂就问,对数组操作时,返回所有真值用 testArray.map(Boolean) 是什么写法

zhw2590582   21 小时 19 分钟前   1

[0, '', false, null, NaN].filter(Boolean)等价于----------------------------------------[0, '', false, null, NaN].filter(item => Boolean(item))

supuwoerc   21 小时 15 分钟前   1

这句话的意思是过滤虚值,我经常这样处理,类似的还可以```array.map(Number)array.map(String)```Boolean,String 都是一个包装函数,传入 map 就是指定 map 处理逻辑。

Leviathann   21 小时 1 分钟前 via iPhone

一个 object 的 get 方法有没有简写类似 Java 的方法引用 xxxMap::get 那种

Bechbaliq   20 小时 56 分钟前

明白了,换成这种写法我就懂了:var x = [0, 1, 0, 0].map(positive);var positive = (x) => new Boolean(x);map 里的 positive 是一个函数,可以直接替换成 Boolean.

DICK23   19 小时 23 分钟前   1

Boolean 就是个构造函数,蕾丝与 i => !!i

shyling   19 小时 22 分钟前   1

Boolean 是个函数

Mexion   19 小时 13 分钟前   1

Boolean 是一个函数,map 会将遍历的元素逐个传进这个函数

mxT52CRuqR6o5   19 小时 9 分钟前   1

@Bechbaliq Boolean(x)和 new Boolean(x)不一样

Bechbaliq   18 小时 30 分钟前 via Android

@mxT52CRuqR6o5 嗯嗯,上面那个 MDN 文档提到了,感谢指出

libook   2 小时 26 分钟前   1

JS 是弱类型语言,可以参考“鸭子类型”的理论。

你以后遇到类似的问题,可以按照如下步骤来探究:
(一)
疑问在于 map 方法的参数上,所以可以去 MDN 上看 Array.prototype.map 方法的参数是什么: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/map
可以看到 map 有 2 个参数,你的例子只传了第一个参数,也就是 map 的 callback 参数,map 会往 callback 函数里传三个参数,也就是说 Boolean 函数会接收到 map 传进来的三个参数。
不要被 Boolean 这个名字迷惑到,给 map 传任何 callback 都是这样的写法,你自己写一个 funcA,也是同样的写法传给 map,如 testArray.map(funA),JS 里名称的大小写没有特殊的特性区别。
(二)
看看 Boolean 是什么,同样去 MDN 上查: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Boolean
看来 Boolean 本身是一个函数,只有一个参数,会返回一个布尔型数据。(而且文档也特意说明了,Boolean 函数和 Boolean 构造函数是两回事,特性不一样,所以换成 new Boolean 会得到不一样的结果)
(三)
所以 map 传给 Boolean 函数的三个参数中,Boolean 函数只会用到第一个,也就是 callback 数组中正在处理的当前元素。
Boolean 会将这个参数转换成一个布尔型数据返回给 map 。
(四)
回过头来看 map 的文档,看看 map 是如何处理 callback 返回的数据的,“callback 每次执行后的返回值(包括 undefined )组合起来形成一个新数组。”
那么结果就很清晰了:map 方法会把数组中的每个元素拿出来传给 Boolean 函数,转换成布尔型数值,然后把结果组成一个新数组。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK