_.slice(array, [start=0], [end=array.length])
裁剪数组array,从 start 位置开始到end结束,但不包括 end 本身的位置。
例子:
_.slice([0,1, 2, 3, 4, 5], 2, 4)
// =>[2, 3]
_.slice源码解析:
function slice(array, start, end) {
// 严谨的数据校验
let length = array == null ? 0 : array.length
if (!length) {
return []
}
start = start == null ? 0 : start
end = end === undefined ? length : end
if (start < 0) {
start = -start > length ? 0 : (length + start)
}
end = end > length ? length : end
if (end < 0) {
end += length
}
length = start > end ? 0 : ((end - start) >>> 0) // length为裁剪后新数组的长度
start >>>= 0 // >>>是非符号移位,目的是保证start为有意义的正整数
let index = -1
const result = new Array(length)
// 将原数组的第index+start元素赋值给裁剪后的新数组
while (++index < length) {
result[index] = array[index + start]
}
return result
}
网友评论