functionmap(arr, callback){let res =[]for(let i =0; i < arr.length; i++){
res.push(callback(arr[i], i))}return res
}
reduce函数封装
functionreduce(arr, callback, indexNum){let result = indexNum
for(let i =0; i < arr.length; i++){
result =callback(result, arr[i])}return result
}
filter函数封装
functionfilter(arr, callback){let result =[]for(let i =0; i < arr.length; i++){// 循环判断回调是否为真,如果为真压入result中let res =callback(arr[i], i)if(res){
result.push(arr[i])}}return result
}
find函数封装
functionfind(arr, callback){for(let i =0; i < arr.length; i++){let res =callback(arr[i], i)if(res){// 如果满足,直接返回当前数return arr[i]}}// 没有找到返回undefinedreturnundefined}
findIndex函数封装
functionfindIndex(arr, callback){for(let i =0; i < arr.length; i++){let res =callback(arr[i])if(res){return i
}}returnundefined}
every函数封装
functionevery(arr, callback){for(let i =0; i < arr.length; i++){let res =callback(arr[i], i)if(!res)returnfalse}returntrue}
concat数组合并
functionconcat(arr,...args){const res =[...arr]
args.forEach(item=>{if(Array.isArray(item)){// 如果是数组
res.push(...item)}else{
res.push(item)}})return res
}
slice数组切片封装
functionslice(arr, start, end){let res =[]if(arr.length ==0)return[]// 判断start
start = start ||0if(start >= arr.length){return[]}// 判断end
end = end || arr.length
if(end < start){
end = arr.length
}for(let i = start; i < end; i++){
res.push(arr[i])}return res
}
// A数组与B数组的差集:A数组里有但是B数组没有的数functiondifference(arr1, arr2 =[]){if(arr1.length ===0)return[]// 如果arr1数组为空直接返回空数组if(arr2.length ===0)return arr1.slice()// 如果arr2为空,则返回arr1数组,但是不能返回原数组let res = arr1.filter(item=>!arr2.includes(item))return res
}
创建对象
functionnewInstance(Fn,...args){//1,创建新对象let obj ={}//2.将新对象的__proto__指向构造函数Fn的prototype
obj.__proto__ =Fn.prototype
//3.执行构造函数并改变this指向let res =Fn.call(obj,...args)//4.返回新对象,判断返回的是基本数据类型还是引用数据类型return res instanceofObject? res : obj
}
functiongetType(data){let obj ={}let types ='Number String Bollean Undefined Null BigInt Symbol Array Object Function Date Error RegExp'
types.split(' ').forEach(item=>{
obj[`[object ${item}]`]= item.toLowerCase()})let res =typeof data =='object'? obj[Object.prototype.toString.call(data)]:typeof data
console.log(res)}getType('123')