js原生提供的数组方法很多,今天来手动实现map,filter,reduce方法。
// 手动实现map方法 [1,2],function(){}
function map(arr,mapCallback){
if(!Array.isArray(arr) || !arr.length || typeof mapCallback!=='function'){
return [];
}else{
let result = [];
for(let i =0,len=arr.length;i<len;i++){
result.push(mapCallback(arr[i],i,arr))
}
return result;
}
}
// filter
function filter(arr,filterCallback){
if(!Array.isArray(arr) || !arr.length || typeof filterCallback!=='function'){
return [];
}else{
let result = [];
for(let i=0,len=arr.length;i<len;i++){
if(filterCallback(arr,i,arr)){
result.push(arr[i]);
}
}
return result;
}
}
// reduce
function reduce(arr,reduceCallback,initialValue){
if(!Array.isArray(arr) || !arr.length || typeof reduceCallback!=='function'){
return [];
}else{
let hansInitialValue=initialValue!==undefined;
let value =hansInitialValue?initialValue:arr[0];
for(let i=hansInitialValue?0:1,len=arr.length;i<len;i++){
value =reduceCallback(value,arr[i],i,arr)
}
return value;
}
}
// 数组去重
// arr.reduce(callback,[initialValue])
// callback (执行数组中每个值的函数,包含四个参数)
// 1、previousValue (上一次调用回调返回的值,或者是提供的初始值(initialValue))
// 2、currentValue (数组中当前被处理的元素)
// 3、index (当前元素在数组中的索引)
// 4、array (调用 reduce 的数组)
// initialValue (作为第一次调用 callback 的第一个参数。)
this.formData.assistSprintTeam = data.reduce((pre, cur) => {
if (!pre.includes(cur)) {
return pre.concat(cur)
} else {
return pre
}
}, [])
// 将类数组转化成数组
function arrayFrom(){
return Array.prototype.slice.call(arguments);
}