一天一个仿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;
}