lodash源码分析之sample

本文为读 lodash 源码的第一百六十二篇,后续文章会更新到这个仓库中,欢迎 star:pocket-lodash

gitbook也会同步仓库的更新,gitbook地址:pocket-lodash

源码分析

sample 的作用是从数组 array 中,随机取出其中的一个值。

源码如下:

function sample(array) {
  const length = array == null ? 0 : array.length
  return length ? array[Math.floor(Math.random() * length)] : undefined
}

要从 array 中随机取值,只需要计算出随机的索引位置,然后再将该索引的值取出即可。

javascript 中,Math.random 方法可以得到 0 到小于 1 的浮点数,但是数组的索引是从 0 到小于 length 的整数。

因为 Math.random0 小于 1 的浮点数,因此使用 Math.random() * length 即可得到从 0 到小于 length 的浮点数。

又索引必须是整数,则使用 Math.floor 即可对所得到的随机数取整,并且是向下取整,从而不会得到超过索引的值 length

对于空数组和传入 null 值或者 undefined,则直接返回 undefined

License

署名-非商业性使用-禁止演绎 4.0 国际 (CC BY-NC-ND 4.0)

最后,所有文章都会同步发送到微信公众号上,欢迎关注,欢迎提意见:

作者:对角另一面

results matching ""

    No results matching ""