JavaScript中6大数组方法

forEach(callback[,object])  ES5新增遍历方法

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
		<ul>
			<li></li>
			<li></li>
			<li></li>
			<li></li>
			<li></li>
			<li></li>
		</ul>
		<script type="text/javascript">
			//常用数组方法
			//foreach方法
			var personArr = [
					{
						name : "张三",
						sex : "男",
						age : 18,
						dec : "你好"
					},
					{
						name : "李四",
						sex : "男",
						age : 19,
						dec : "你真帅"
					},
					{
						name : "王五",
						sex : "女",
						age : 18,
						dec : "长头发"
					},
					{
						name : "赵六",
						sex : "男",
						age : 20,
						dec : "憨憨的"
					},
					{
						name : "孙七",
						sex : "女",
						age : 19,
						dec : "傻白甜"
					},
					{
						name : "刘八",
						sex : "男",
						age : 25,
						dec : "抽烟喝酒打牌"
					}
				];
				//forEach(callback[,object])  ES5新增遍历方法
				
				 personArr.forEach(function(ele,index,self){
					//console.log(ele,index,self);
					//ele  数组的每一项
					//index  索引
					//self数组本身
					console.log(this);//指向的时window
				},{name:"jack"});//传第二个对象参数 改变this的指向
				
				personArr.forEach(function(ele,index,self){
					this[index].innerHTML=ele.name;
				},document.getElementsByTagName("li"));//改变this指向
			
		</script>
	</body>
</html>

自己封装forEach:

Array.prototype.myForEach=function(func){
				//this指向window
				var _arr=this;//数组备份
				var len=_arr.length;
				var param2=arguments[1]||window;
				for(var i=0;i<len;i++){
					func.apply(param2,[_arr[i],i,_arr]);
				}
			}
			personArr.myForEach(function(ele,index,self){
				console.log(ele,index,self);
					this[index].innerHTML=ele.name;
				},document.getElementsByTagName("li"));//改变this指向
			

filter过滤   返回一个boolean  如果为true留在新数组中  否则不留

var newArr=personArr.filter(function(ele,index,self){
					//console.log(ele,index,self);
					console.log(this);//默认是window
					//过滤  如果性别是男加入新数组
					if(ele.sex=="男"){
						return true;
					}else{
						return false;
					}
					
				},{name:"jack"});
				console.log(newArr);

自己封装filter方法:

Array.prototype.myFilter=function(func){
					var _arr=this;
					var len=_arr.length;
					var param2=arguments[1]||window;
					var newArr=[];
					for(var i=0;i<len;i++){
						func.apply(param2,[_arr[i],i,_arr])?newArr.push(_arr[i]):"";
					}
					return newArr;
				}
				var newArr=personArr.myFilter(function(ele,index,self){
					console.log(ele,index,self);
					console.log(this);//默认是window
					//过滤  如果性别是男加入新数组
					if(ele.sex=="男"){
						return true;
					}else{
						return false;
					}
					
				},{name:"jack"});
				console.log(newArr);
				

map  返回一个新的数组   可以对原数组里面的参数进行修改

var newArr=personArr.map(function(ele,index,self){
				//console.log(ele,index,self);
				//console.log(this);
				ele.age+=10;
				return ele.age;
			},{name:"jack"});
			console.log(newArr);

自己封装map

Array.prototype.myMap=function(func){
				var _arr=this;
				var len=_arr.length;
				var param2=arguments[1]||window;
				var newArr=[];
				for(var i=0;i<len;i++){
					newArr.push(func.apply(param2,[_arr[i],i,_arr]));
				}
				return newArr;
			}
			var newArr=personArr.myMap(function(ele,index,self){
				//console.log(ele,index,self);
				//console.log(this);
				ele.age+=10;
				return ele.age;
			},{name:"jack"});
			console.log(newArr);

every some 返回一个boolean值
every  所有为true才为true

some   一个为true就为true

var flag=personArr.every(function(ele,index,self){
					console.log(ele,index,self,this);
					//return true;
					return ele.age>18;//判断年龄是否都大于18岁   如果全部都大于返回true否则返回false
				},{name:"jack"});
				
				console.log(flag);

自己封装every

Array.prototype.myEvery=function(func){
				var _arr=this;
				var len=_arr.length;
				var param2=arguments[1]||window;
				var flag=true;
				for(var i=0;i<len;i++){
					if(!func.apply(param2,[_arr[i],i,_arr])){
						flag=false;
						break;
					}
				}
				return flag;
			}
			var flag=personArr.myEvery(function(ele,index,self){
					console.log(ele,index,self,this);
					//return true;
					return ele.age>18;//判断年龄是否都大于18岁   如果全部都大于返回true否则返回false
				},{name:"jack"});
				
				console.log(flag);

reduce 上一次执行完成的返回值  作为下一次执行的初始值

personArr.reduce(function(prevValue,ele,index,self){
					//prevValue  以前的值
					//第二个参数代表初始值,不代表改变this指向
					console.log(prevValue,ele,index,self);
					return prevValue;//第一次执行完成的返回值  作为下一次执行的初始值
				},{name:"Jack"});

reduce自己封装

Array.prototype.myReduce=function(func,initValue){
					var _arr=this;
					var len=_arr.length;
					var param2=arguments[2]||window;
					for(var i=0;i<len;i++){
						initValue=func.apply(param2,[initValue,_arr[i],i,_arr]);
					}
					return initValue;
				}
				personArr.myReduce(function(prevValue,ele,index,self){
					//prevValue  以前的值
					//第二个参数代表初始值,不代表改变this指向
					console.log(prevValue,ele,index,self);
					return 123;//第一次执行完成的返回值  作为下一次执行的初始值
				},{name:"Jack"});

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值