每天一个lodash方法(8)

2018-08-29  本文已影响19人  公子七

Array method 系列之八

 function join(array, separator) {
      // 调用原生join方法实现
      return array == null ? '' : nativeJoin.call(array, separator);
}
function last(array) {
  const length = array == null ? 0 : array.length
  // 最后一个元素 == array[length - 1]
  return length ? array[length - 1] : undefined
}
function lastIndexOf(array, value, fromIndex) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return -1;
      }
      var index = length;
      if (fromIndex !== undefined) {
        index = toInteger(fromIndex);
        index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);
      }
      // 确定查询起始位置index
      return value === value
        ? strictLastIndexOf(array, value, index)
        : baseFindIndex(array, baseIsNaN, index, true);
    }

// strictIndexOf
function strictLastIndexOf(array, value, fromIndex) {
  let index = fromIndex + 1
  // 从尾部遍历查询
  while (index--) {
    if (array[index] === value) {
      return index
    }
  }
  return index
}
// baseFindeIndex是通过谓词判定比较值是否相等
function nth(array, n) {
  const length = array == null ? 0 : array.length
  if (!length) {
    return
  }
  // 判断n是否小于0
  n += n < 0 ? length : 0
  // isIndex判断n是否是有效的index,如果有效,返回array[n],否则,返回undefined
  return isIndex(n, length) ? array[n] : undefined
}
上一篇下一篇

猜你喜欢

热点阅读