最近用到的数组迭代方法有点多,特此总结一下。
共有的特点:参数都是回调函数,回调函数中的第一个参数是value,第二个参数是index,都会遍历数组
1、forEach
forEach的主要作用就是遍历数组,比如下面我有一个数组,可以使用forEach遍历,但是一个最大的缺点就是无法停止循环,只能加入一些条件取出特定的值。没有返回值
let arr = ["web", false, 20, 30, 90, 80];
arr.forEach((value, index) => {
console.log(index);
console.log(value);
})
2、some
some方法返回值是布尔类型,判断数组中的元素是否满足条件,如果有一个满足就返回true,否则返回false。
let array = [11, 22, 33, 44, 55, 66];
let flag1 = array.some(function (value, index) {
return value >= 33;
})
console.log(flag1) //true
3、every
every方法返回值是布尔类型,判断数组中的元素是否满足条件,如果全部满足返回true,否则返回false。
let array = [11, 22, 33, 44, 55, 66];
let flag2 = array.every(function (value, index) {
return value >= 33;
})
console.log(flag2) //false
4、map(重点)
他的返回值是一个新数组,不会改变原数组,新数组的值是原始数组调用函数处理后的值,看代码:
let array = [11, 22, 33, 44, 55, 66];
function Twice(num){
return num*2
}
let flag3 = array.map(Twice)
console.log(flag3)
有一个很经典的面试题,是这样的
var arr = ['1', '2', '3'].map(parseInt)
console.log(arr) // 输出的结果是?
首先我们搞清楚第一行代码干了什么?使用map对数组进行遍历,然后调用了parseInt方法对数组元素做了变化,返回一个arr新数组,第二步就是搞清楚parseInt方法,parseInt接收两个参数第一个是string,就是要转化的字符串,第二个是radix,要转化为几进制的数,所以上面的执行步骤就是
parseInt('1', 0), parseInt('2', 1), parseInt('3', 2)
所以结果是
[1, NaN, NaN] //返回一个数组,结果要写成数组的形式
5、filter(重点)
从名字上就可以看出是过滤元素,没错,根据条件过滤元素,返回一个新的数组,看代码
var array = [11, 22, 33, 44, 55, 66];
var arr = array.filter(function (v, i) {
return v >= 33;
})
console.log(arr);
arr的中的元素是全部大于33的
6、reduce
这个是计算数组元素相加后的值(从左到右),看代码
var array = [11, 22, 33, 44, 55, 66];
var arr = array.reduce(function (v, i) {
return Math.pow(v, 2);
})
console.log(arr);
最终的结果是每个元素的平方相加后的值。