遍历器的介绍

遍历器:取出数据容器中的每一个元素的工具

for 最重要的 兼容性好

		var arr=[10,203,44,54,5]
			for(var i=2;i<4;i++){
				arr[i]
			}

for/in 既可以遍历数组也可以遍历对象 (原型对象也会被遍历)

	var obj={age:20,name:"karen"}
			obj.__proto__={life:1}
			for (var key in obj) {
				console.log(key)
			}

//age name life
var arr=[10,203,44]
			for (var i in arr) {
				console.log(i,arr[i])							
			}
//0 10   1 203    2 44
var obj={name:"karen",age:23}
			for(var key in obj){
				console.log(key)
				//obj.key 
                  obj[key] //key是变量不能用.
			}
//name karen   age  23

forEach循环

var arr=[10,203,34]
			arr.forEach(function(el,index,arr){
				console.log(el,index,arr) 
//第一个参数必须有,第二三个可选,分别代表数组的下标 和 原数组
			})

// 10  0   [10, 203, 34]
// 203 1   [10, 203, 34]
// 34  2   [10, 203, 34]
	var arr = [10, 203, 44]
			var re=arr.forEach(function(el){
				console.log(el)
			})
			console.log(re) 
//10 203 44 undefined
 自己设计一个forEach函数

	Array.prototype.myforEach = function(callback) {
				for (var i = 0; i < this.length; i++) {
					callback(this[i])
				}
			}
			var re = arr.myforEach(function(el) {
				console.log(el)
			})

 Array map() 方法,

返回一个新数组, 数组中的元素为原始数组元素调用函数处理后的值。注意: map 和 forEach 方法都是只能用来遍历数组, 不能用来遍历普通对象。map和forEach一样为三个参数。

	var arr=[10,20,9]
			var re=arr.map(function(el){
				console.log(el)

				// return 100
				return el*el
			})
			console.log(re,arr)

//  10 20 9     [100, 400, 81]   [10, 20, 9]
需求
//打印[{name:"karen",birth:"2001-02-03",age:21},{name:"jack",birth:"2002-02-03",age:20}]

var arr=[{name:"karen",birth:"2001-02-03"},{name:"jack",birth:"2002-02-03"}]
			var arr2=arr.map(function(el){
				el.age=new Date().getFullYear()-new Date(el.birth).getFullYear()
				return el
			})
			console.log(arr2)
			

 Array filter() 方法   它会返回通过过滤(判断是否为真,从而返回值)的元素, 不改变原来的数组。

var arr=[10,80,34,50]
			var re=arr.filter(function(el,index,arr){
				// console.log(el)
				// return true
				if(el>18){
					return true
				}else{
					return false
				}
			})
			console.log(re)// [80, 34, 50]
	var arr=[{tag:0,name:"karen"},{tag:1,name:"jack"},{tag:1,name:"marry"}]
			var arr2=arr.filter(function(el){
			  	return el.tag
			})
			console.log(arr2) //[{tag:1,name:"jack"},{tag:1,name:"marry"}]

Array some() 方法用于检测数组中的元素是否满足指定条件( 函数提供), 返回 boolean 值, 不改变原数组。一旦返回true,便会停止遍历。

	var  arr=[10,200,500,400]
			var re=arr.some(function(el){
				console.log(el)
				return el>100
			})
			console.log(re)//10 200 true
	//自己设计mysome功能函数

			Array.prototype.mysome=function(callback) {
				for(var i=0;i<this.length;i++){
					if(callback(this[i],i,this)){return true}
				}
				return false				
			}			
			var  arr=[10,200,500,400]
			var re=arr.mysome(function(el){
				console.log(el)
				return el>100
			})
			console.log(re)

Array reduce() 方法

			var arr=[10,20,4,5]
			var re=arr.reduce(function(n1,n2){
				console.log(n1,n2)
				return n1+n2
			})
			console.log(re)
// 10 20
// 30 4
// 34 5
// 7 39

			var arr=[10,20,4,5]
			var re=arr.reduce(function(n1,n2){
				console.log(n1,n2,1111111111)
				return n1+n2
			},10000)
			console.log(re)
// 10000 10 1111111111
// 10010 20 1111111111
// 10030 4 1111111111
// 10034 5 1111111111
// 10039
			var arr = [{
					title: "肉香肉丝",
					price: 18,
					count: 2
				},
				{
					title: "米饭",
					price: 1,
					count: 5
				},
				{
					title: "水煮肉片",
					price: 28,
					count: 1
				},
				{
					title: "鸡公煲",
					price: 20,
					count: 1
				}
			]
			
			var re=arr.reduce(function(n1,n2){
				// console.log(n1,n2)
				return n1+n2.price*n2.count
			},0)
			console.log(re) //89
			
			var re=arr.reduce(function(n1,n2){
				if(!n1.total){
					n1.total=n1.price*n1.count+n2.price*n2.count
				}
				else{
					n1.total=n1.total+n2.price*n2.count
				}
				return n1
			})
			console.log(re)
			

Array reduceRight() 方法  从末尾开始相加

			var arr=[100,203,34,50]
			arr.reduceRight(function (n1,n2){
				console.log(n1,n2)				
			},0)
			

计算总价除了可以用 for,reduce 还可以使用eaval()

var arr=[10,203,4,5]
			var re=eval(arr.join("+"))
			console.log(re)


var arr=[10,203,4,5]
			var total=0;
			for(var i=0;i<arr.length;i++){
				total+=arr[i]
			}
			console.log(total)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值