lodash源码分析之baseSlice()函数

♀尐吖头ヾ 提交于 2019-12-24 07:40:04

源码

function baseSlice(array, start, end) {
    var index = -1,
        length = array.length;
    if (start < 0) { // 传入的参数转换
      start = -start > length ? 0 : (length + start);
    }
    end = end > length ? length : end; // 这里判断之后,end依然有可能为负数
    if (end < 0) { // 传入的参数转换
      end += length;
    }
    // 先对start和end单独做判断,然后,二者在比较
    length = start > end ? 0 : ((end - start) >>> 0); // 按位操作符操作数字的二进制形式,但是返回值依然是标准的JavaScript数值。
    start >>>= 0;
    var result = new Array(length);
    while (++index < length) {
      result[index] = array[index + start];
    }
    return result;
  }

我的代码

// 数组的slice方法重写
  function mySlice(arr, start, end) {
    let index = -1,
      length = arr.length;
    if (start >= length || end === 0) {
      return new Array(0);
    }
    if (start < 0) {
      start = -start > length ? 0 : length + start;
    }
    if (end < 0) {
      end += length;
    }
    if (end > length) {
      end = length;
    }
    length = start > end ? 0 : end - start;
    let result = new Array(length);
    while (++index < length) {
        result[index] = arr[index + start];
    }
    return result;
  }
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!