遍历器:取出数据容器中的每一个元素的工具
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)