常用数组元素的迭代方法:
1、 map()方法
返回一个新数组,新数组是原数组的映射;
不改变原数组的值;
新数组的元素值是每次函数return的返回值;
若不写return,接收的新数组的元素值将全为空;
var arr = [20,13,11,8,0,11];
var brr = arr.map(function(item)){
//练习一:将数组的每个元素都将增加到原来的1.2倍
return item*1.2;
// 此时brr为a数组每个元素的1.2倍
//练习二:若return 1,则新数组的每个元素值均为1
return 1;
}
2、indexOf()方法
判断一个元素是否存在于数组中,若不存在返回-1,若存在就返回它第一次出现的位置。
var arr = [20,13,11,8,0,11];
arr.indexOf(11); //返回第一个11的索引:2
arr.indexOf(2); //返回-1
3、forEach()方法
forEach()方法的功能是循环遍历数组中的每一个元素;
forEach()方法会接收一个函数;
这个函数包含三个形参,分别为:item, index, array, 用不到时可以不写
1、item 表示每次迭代的元素
2、index 表示每次迭代元素的下标
3、array 表示原数组
var arr = [20,13,11,8,0,11];
var min = arr[0]; //假设数组的第一个元素的为最小值
arr.forEach(function(item,index,array){
//练习一:输出数组的每个元素及其对应的下标
console.log(index,item);
//练习二:输出数组中值为奇数的元素
if(item%2){
console.log(item);
}
//练习三:求数组的最小值
if(item<min){
min = item;
}
})
alert(min);
4、some()方法
return返回的值只要有一项为true,最终的返回值就为true,不会继续遍历后边的元素;
若没有一项满足返回值为true的,就返回false;
原数组不受影响;
var arr = [20,13,11,8,0,11];
var brr = arr.some(function(item){
return item>10;
})
alert(brr); //true
5、filter()方法
过滤元素,返回一个新数组;
新的数组由每次函数返回值为true对应的元素组成;
原数组不受影响;
var arr = [20,13,11,8,0,11];
var brr =arr.filter(function(item)){
//返回值为奇数的元素
return item%2;
}
6、 every()方法
对数组的每一项执行给定的函数,假如该函数每一项都返回true,最后结果才为true;
只要有一项返回值为false,最后结果就是false。且后边的元素都不会再继续执行函数;
原数组不受影响;
var arr = [20,13,11,8,0,11];
var brr = arr.every(function(item){
return item>10;
})
alert(brr); //false
7、reduce()方法
收敛,返回值是最后一次函数调用的返回值;
不写return时,默认返回undefined;
运行机制:
一开始,prev代表数组第一个元素,next指向数组第二个元素 ;
函数有个返回值,会作为下次的prev值;
当给方法第二个参数值时,prev从传的第二个参数值开始,next从第一个元素值开始
var arr = [1,4,5,7,8,10];
var res = arr.reduce(function(prev,next){
console.log(prev+"---"+next);
return 4;
})
console.log(res);
/*
分析:
一开始,prev代表数组第一个元素,next指向数组第二个元素 1---4
函数有个返回值,会作为下次的prev值
4---5
4---7
4---8
4---10
*/
//应用:求数组所有元素的和
var arr = [1,4,5,7,8,10];
var res = arr.reduce(function(prev,next){
console.log(prev+"---"+next);
return prev+next;
})
console.log(res);
/*
分析:
一开始,prev代表数组第一个元素,next指向数组第二个元素 1---4
函数有个返回值,会作为下次的prev值
5---5 返回10
10---7 返回17
17---8 返回25
25---10 返回35
*/
//reduce()还可以有第二个参数
var arr = [1,4,5,7,8,10];
var res = arr.reduce(function(prev,next){
console.log(prev+"---"+next);
return prev+next;
},100) //prev从传的第二个参数值100开始,next从第一个元素值开始
console.log(res);
//reduce()应用:将两个数组合并成一个对象
var arr3 = ["Lydia","21"];
var arr4 = ["name","age"];
arr4.reduce(function(prev,next,item){
prev[next] = arr3[index];
return prev;
},{}); //传的第二个参数值是一个空对象
console.log(obj);
/*
第一次的prev是一个空对象,对象的next属性(即arr4的第一个元素)的值为arr3的第一个元素值
*/