Skip to content

_.slice(array, [start=0], [end=array.length]) #1

Open
@JCHappytime

Description

@JCHappytime

1. 作用及使用

裁剪数组array,从start位置开始到end结束,但不包括end本身的位置。也就是左闭右开的形式。
这个方法可以替代数组本身的Array.slice()方法来确保数组正确返回。
【参数】

  1. array: 要裁剪的数组
  2. start=0: 开始位置
  3. end=array.length: 结束位置

2. 示例

  1. start和end都传
    slice

  2. start和end都不传
    slice

  3. 只传start

slice-2

3. 源码分析

源码:
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;   
  // 这里的>>>表示向右移位,>>>0的意思是无符号移位,该操作符会将第一个操作数向右移动指定的位数。向右被移出的位被 
 // 丢弃,左侧用0填充。因为符号位变成了0,所以结果总是非负的。
  start >>>= 0;

  let index = -1;
  const result = new Array(length);
  while (++index < length) {
    result[index] = array[index + start];
    // 当index + 1的值小于数组长度时,result数组的index位置的值被赋值为array的[index+start位置的值]
  }
  return result;
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    数组数组相关的操作

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions