JS方法重构

目录

一、栈与队列方法

  1.重构pop方法

  2.重构push方法

  3.重构shift方法

  4.重构unshift方法

  二、迭代方法

  1.重构forEach

  2.重构every

  3.重构some

  4.重构map

  5.重构filter


一、栈与队列方法

  1.重构pop方法

  pop() 方法用于删除数组的最后一个元素并返回删除的元素。

  参数:无      返回值:删除掉的数组元素      修改原数组

Array.prototype.myPop=function(){
	if(this.length>0){
		// 返回值 返回删除的数组最后一项 
		var last = this[this.length-1];
		// 数组长度减1 
		this.length--;
		return last;
	}else{
		// 数组为空 
		return undefined
	}
}
var arr = [1,2,3,4,5];
var res = arr.myPop();
console.log(res,arr);

  2.重构push方法

  push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度。

  参数:添加数组元素     返回值:返回新数组的长度     修改原数组

Array.prototype.myPush = function(){
	// [1 2 3,] this[this.length]
	// 遍历调用myPush实际参数  把实际参数放在数组的末尾下一项
    /**arguments类数组
    按索引从小到大循环数组
    arguments,是调用函数时,传入的参数数组
    console.log(arguments);*/
	for(i=0;i<arguments.length;i++){
			this[this.length]=arguments[i]//给当前数组的最末端,加入一个新的元素
	}
	return this.length
}
var arr = ['hello','10',25];
var res = arr.myPush('tom','terry');
console.log(res,arr);

function fc(a,b){
	// console.log(a,b)
	// 函数内部属性 arguments 专门保存实际参数的类数组对象 下角标 索引
	console.log(arguments[3])//0123,索引为4
}
fc(1,2,3,4,5)

  3.重构shift方法

  shift() 方法用于把数组的第一个元素从其中删除,并返回第一个元素的值。

  参数:无    返回值:返回删除的第一项数组元素    修改原数组

Array.prototype.myShift = function(){
	// 先获取第一项数组元素 
	var first = this[0];
	for(var i=0;i<this.length;i++){
		// 将后面得所有数组元素往前移动一位
		this[i] = this[i+1];
	}
	// 数组长度减1
	this.length--;
	// 返回第一项
	return first
}
var arr = [1,2,3,4,5];
var res = arr.myShift();
console.log(res,arr);

  4.重构unshift方法

  unshift() 方法可向数组的开头添加一个或更多元素,并返回新的长度。

  参数:增加的数组元素       返回值:新数组的长度        修改原数组

Array.prototype.myUnshift=function(){
	// console.log(arguments.length);
	// 新数组长度 sum = 原数组长度 + 实参得个数(arguments得长度auguments.length)
	var sum = this.length + arguments.length;
	for(i=sum;i>0;i--){
		// 将原数组得中数组元素向后移动argument.length位
		if(i>arguments.length){
			// 1 2 3 4 5 [4]
			// xxx xxx 1 2 3 4 5 [6]
			// this[6] = this[4] 
			this[i - 1] = this[i - 1 - arguments.length]
		}else{
			this[i - 1] = arguments[i-1]
		}
	}
	// 返回新数组得长度 
	return sum
}
var arr = [1,2,3,4,5];
var res = arr.myUnshift('tom','larry');
console.log(res,arr);//['tom','larry','terry',1,2,3,4,5]

  二、迭代方法

  1.重构forEach

  forEach() 方法用于调用数组的每个元素,并将元素传递给回调函数。 forEach() 对于空数组是不会执行回调函数的。

Array.prototype.myForEach = function(callback){
	// callback ---> function(item,index,arr){console.log(item,index,arr)}
	for(var i=0;i<this.length;i++){
		callback(this[i],i,this)
	}
}
var arr = [1,2,3,4,5];
arr.myForEach(function(item,index,arr){
	console.log(item,index,arr)
});

  2.重构every

every() 方法用于检测数组所有元素是否都符合指定条件(通过函数提供)。

every() 方法使用指定函数检测数组中的所有元素:

  • 如果数组中检测到有一个元素不满足,则整个表达式返回 false ,且剩余的元素不会再进行检测。

  • 如果所有元素都满足条件,则返回 true。

注意: every() 不会对空数组进行检测。

注意: every() 不会改变原始数组。

Array.prototype.myEvery = function(callback){
	for(var i=0;i<this.length;i++){
		// 找不符合条件表达的数组元素直接返回false 其他返回true
		if(!callback(this[i])){
			return false
		}
	}
	return true
}
var arr = [1,2,3,4,5];
var res = arr.myEvery(function(item){
	console.log('every');
	return item>0
});
console.log(res);

  3.重构some

some() 方法用于检测数组中的元素是否满足指定条件(函数提供)。

some() 方法会依次执行数组的每个元素:

  • 如果有一个元素满足条件,则表达式返回true , 剩余的元素不会再执行检测。

  • 如果没有满足条件的元素,则返回false。

注意: some() 不会对空数组进行检测。

注意: some() 不会改变原始数组。

Array.prototype.mySome = function(callback){
	for(var i=0;i<this.length;i++){
		// 只要有一个数组元素符合条件表达式 直接返回true
		if(callback(this[i],i,this)){
			return true
		}
	}
	return false
}
var arr = [1,2,3,4,5];
var res = arr.mySome(function(item,index,arr){
	console.log('some')
	return item>5
});
console.log(res);

  4.重构map

map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。

map() 方法按照原始数组元素顺序依次处理元素。

注意: map() 不会对空数组进行检测。

注意: map() 不会改变原始数组。

Array.prototype.myMap = function(callback){
	var newArr = [];
	for(var i=0;i<this.length;i++){
		newArr.push(str?callback.bind(str,this[i])(i,this):callback(this[i]))
	}
	return newArr
}
var arr = [1,2,3,4,5];
var res = arr.myMap(function(item,index,arr){
	return item+5
}'hello');
console.log(res);

  5.重构filter

filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。

注意: filter() 不会对空数组进行检测。

注意: filter() 不会改变原始数组。

Array.prototype.myFilter = function(callback){
	var newArr = [];
	for(var i=0;i<this.length;i++){
		if(callback(this[i])){
			newArr.push(this[i])
		}
	}
	return newArr;
}
var arr = [1,2,3,4,5];
var res = arr.myFilter(function(item){
	return  item > 3
});
console.log(res);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>