一天一个仿lodash函数实现-sortedUniq

sortedUniq 和 uniq很像(uniq还没讲到就已经开始说sortedUniq了)

将排好序的数组去重,因为数组本身就排序了,那就好办了,遍历数组,重复的元素只会是连续的,所以只要用一个变量记录遍历时经过的不同数,下一个遍历只要遇到不同的数,就推入结果,并赋值给变量即可。

function sortedUniq(arr){
  if(!arr.length) return [];
  let index = 1;
  const end = arr.length;
  const result = [arr[0]];
  let seen = arr[0];
  while(index<end){
    if(arr[index]!==seen) {
      result.push(arr[index])
      seen = arr[index];
    }
    index++;
  }
  return result;
}

function sortedUniqBy(arr, iteratee){
  if(!arr.length) return [];
  const it = typeof iteratee === 'string'?i=>i[iteratee]:iteratee;
  let index = 1;
  const end = arr.length;
  const result = [arr[0]];
  let seen = it(arr[0]);
  while(index<end){
    const cur = it(arr[index])
    if(cur!==seen) {
      result.push(arr[index])
      seen = cur;
    }
    index++;
  }
  return result;
}
posted @ 2022-06-28 20:10  Dont  阅读(41)  评论(0编辑  收藏  举报