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

uniq数组去重,只保留第一次出现的元素,也就是要保证元素的顺序,刚实现的union利用数组遍历来做,实际uniq也可以这么搞。

function uniq(arr){
  return arr.reduce((pre, cur)=>{
    if(!pre.includes(cur)) {
      pre.push(cur)
    }
    return pre;
  }, [])
}

function uniqBy(arr, it){
  const iteratee = typeof it === 'string'?val=>val[it]:it;
  return arr.reduce((pre, cur)=>{
    if(!pre.some(item=>iteratee(item)===iteratee(cur))) {
      pre.push(cur)
    }
    return pre;
  }, [])
}

function uniqWith(arr, comparator){
  return arr.reduce((pre, cur)=>{
    if(!pre.some(item=>comparator(item,cur))) {
      pre.push(cur)
    }
    return pre;
  }, [])
}
posted @ 2022-06-30 09:07  Dont  阅读(112)  评论(0编辑  收藏  举报