手动实现数组map,filter,reduce,将类数组转成数组方法

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);
		}

猜你喜欢

转载自blog.csdn.net/Miss_hhl/article/details/103969571