underscore.js 源码解析(五)
sample
toArray
size
partition
_.sample
_.sample(list, [n])
用于产生一个随机样本, 传递的参数 n 表示从 list
中返回 n
个随机元素。源码分析
1 | _.sample = function(obj, n, guard) { |
- 通过使用
Math.max()
用来获得一组数中的最大值。1
2
3
4Math.max(value1, value2, value3, value4...)
// 获取到 value1, value2, value3, value4... 等一组数中的最大值
Math.min(value1, value2, value3, value4...)
// 获取到 value1, value1.. 中的最小值 - 使用
Array.slice
用来进行分割数组Array.slice(start, end)
分割的数组中包括start
不包括end
toArray
实例
_.toArray(list)
如果 list
是一个可以迭代的对象, 可以将 list
转化为一个数组。源码分析
1 | _.toArray = function(obj) { |
obj.length
进行判断的时候:- 对象是数组:使用
Array.isArray
进行判断,当 这个判断不支持的时候,使用Object.prototype.toString
进行判断。1
2
3function isArray(obj) {
return Array.isArray(obj) || Object.prototype.toString.call(obj) ==== '[object Array]';
} - 对象是类数组对象对于类数组对象也有
length
属性,因此当我们判断类数组对象不是数组的时候,接下来进行判断:1
2
3if (obj.length === +obj.length) {
// 判断得到是类数组对象
} - 当得到的类型是对象的时候
1 | // 对于对象而言: obj.length: undefined |
size
_.size(list)
用于返回 list
的长度当 list
是数组的时候,返回的是数组的长度,当 list
是对象的时候,返回的是对象的长度。实例
1 | let person = { |
源码分析
使用_.size
进行判断的数组数量的方法十分简单,判断传入的是对象或者是数组,对象的话返回的是键的值,对于数组返回的是数组的长度。1 | function size(list) { |
partition
_.partition(array, predicate)
实例
使用partition
的目的在于拆分一个数组为两个数组,拆分之后的数组中第一个数组是满足 predicate
函数的数组,拆分之后的第二个数组是不满足 predicate
函数的数组。
predicate
: 断言,断定,宣布,宣讲,使基于
源码分析
1 | _.partition = function(obj, predicate, context) { |