数组的迭代器方法:
一、不生成新数组的迭代器方法
1.forEach():对数组中的每一项运行给定的函数,没有返回值。
示例如下:
var arr = [10, '123', 3, 5, 6, 2];
//forEach()循环遍历数组 value:(数组的每一项) index:(数组下标/索引) ,array:(原数组)
arr.forEach(function (value, index, array) {
console.log(value, index, array);
// 不能跳出循环 break continue
})
注意:在forEach方法中,不能截止/跳出循环(使用break或者continue都不行)。
根据打印结果可知,第一个参数代表 数组循环的每一项 ;第二个参数代表 当前所在项的索引;第三个参数代表 原数组。
2.every():对数组中的每一项运行给定函数,如果该函数对每一个项都返回true,则返回true;反之,有一个值是false(默认返回false)。
示例如下:
// 遍历:value:每一项的值, index:下标 array:原数组
// 所有项函数运行为true,整体结果为true
var arr = [10, '123', 3, 5, 6, 2];
let result= arr.every(function (value, index, array) {
console.log(value, index, array);
return value > 5;
})
console.log(result);
注意:在every方法中,遇到结果为false,立即跳出循环。
案例:
要求:有一个对象project,其中有名称,价格,数量,每个商品价格总和都小于5000,输出true;但凡有一个大于5000,输出false。
var project = [{
name: "毛巾",
price: 200,
num: 10, //200*10=2000
}, {
name: "牙刷",
price: 18,
num: 200, //18*20=3600
}, {
name: "牙膏",
price: 38,
num: 200, //7600
}];
var res = project.every(function (val, i) {
return val.price * val.num < 5000;
})
console.log(res);//false
3.对数组中的每一项运行给定函数,如果该函数对任一一项返回true,则返回true(默认返回false)。
示例如下:
// some : 遇到true就终止循环
// 只要一个结果为true,整体结果就为true
var arr = [1, '12', 3, 15, 6, 2];
var res = arr.some(function (value, index, array) {
console.log(value, index, array);
return value > 13;
})
console.log(res);
结果:
以上三种变量方法都不会生成新的数组,也不会改变原数组。
二、生成新数组的迭代器方法
1.map():对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组。
var arr = [10,20,3,5,6,2];
var res = arr.map(function(value,index,array){
console.log(value,index,array);
return value * 2;
})
console.log(res);//[20,40,6,10,12,4]
console.log(arr);//[10,20,3,5,6,2]
map方法可以对函数的每一项进行操作,并返回到新数组中。
map方法---关于稀释数组:
var arr1 = [, 10, 20, undefined, 40, 1, 6, null, NaN, 0, "", Infinity]; //0
var res2 = arr1.map(function (val, index) {
console.log(val,index);
if(val === undefined){
return 0;
}else{
return val;
}
// return val === undefined ? 0 : val;
})
console.log(res2);
结果:
对于稀疏数组中的 没填写的项 等同于 empty ,map方法遍历时会直接跳过
map方法是将空值直接跳过不进行运算,但是会在最终结果保留空值。
2.filter(): 参数需要传入一个返回值为布尔类型的函数。
和every()方法不同的是, 当对数组中的所有元素应用该函数,结果均为 true 时,该方法并不返回true,而是返回一个新数组,该数组包含应用该函数后结果为 true 的元素。
// filter : 过滤器
var arr = [1, 23, 4, 5, 6, 7, 10, 1];
var res = arr.filter(function (val, index, array) {
console.log(val, index, array);
return val >= 10;
})
console.log(arr);
console.log(res);
结果:
以上两种方法对数组进行遍历,都会把返回值赋值到新数组当中。