乘风破浪会有时,直挂云帆济沧海
仿写lodash的difference
feature
根据第二个参数进行过滤返回一个新的数组。
difference([{id:1},{id:2}],[{id:2}],(item)=>item.id)
// [{id:1}]
difference([1,2,3],[1])
// [2,3]
实现
function difference(array,values,comparator){
const isArrayOfArray = Array.isArray(array);
const isArrayOfValues = Array.isArray(values);
//判断是否有空值,跳过处理
if(!isArrayOfArray && !isArrayOfValues)return [];
if(!isArrayOfArray && isArrayOfValues)return values;
if(isArrayOfArray && !isArrayOfValues)return array;
let result = [];
outer: for(let prop of array){
const computed= comparator?comparator(prop):prop;
let index = values.length;
while(index--){
const _computedValue = comparator?comparator(values[index]):values[index];
if(_computedValue === computed){
// 如果两个值相同跳出当前循环
continue outer;
}
}
result.push(value);
}
return result;
}