1、map
map 的作用是生成一个新的数组,遍历原数组,将每个元素拿出来做一些变换后放入到新的数组中。
[1, 2, 3].map(v => v + 1) // -> [2, 3, 4]
另外 map 的回调函数接受三个参数,分别是当前的索引元素,索引,原数组
['1', '2', '3'].map(parseInt)
- 第一轮遍历 parseInt('1' , 0) -> 1
- 第二轮遍历 parseInt('2',1) -> NaN
- 第三轮遍历 parseInt('3',2) -> NaN
其中 parseInt() 函数可解析一个字符串,并返回一个整数。可接收两个参数,第一个参数是要被解析的字符串,必需传入,第二个参数是表示要解析的数字的基数,可传可不传。该值介于 2 ~ 36 之间。如果省略该参数或其值为 0,则数字将以 10 为基础来解析。如果它以 “0x” 或 “0X” 开头,将以 16 为基数。如果该参数小于 2 或者大于 36,则 parseInt() 将返回 NaN。
2、filter
filter 的作用也是生成一个新的数组,在遍历数组的时候将返回值为 true 的元素放入新的数组中,我们可以利用这个函数删除一些不需要的元素
let array = [1, 2, 4, 6];
let newArray = array.filter(item => item !== 6);
console.log(newArray); // [1, 2, 4]
和 map 一样,filter 的回调函数一样接受三个参数,用处也相同。
3、reduce
reduce 可以将数组中的元素通过回调函数最终转换为一个值。
如果不用 reduce 方法想实现一个功能将函数里的元素全部相加得到一个值,可以这样写
const arr = [1, 2, 3];
let total = 0;
for (let i = 0; i < arr.length; i++) {
total += arr[i];
};
console.log(total); // 6
但是如果使用 reduce 方法将遍历部分的代码优化为一行代码
const arr = [1, 2, 3];
const sum = arr.reduce((acc, current) => acc + current, 0)
console.log(sum); // 6
对于 reduce 来说,它接收两个参数,分别是回调函数和初始值,接下来分析一下上述代码 reduce 的过程
- 首先初始值为 0,该值会在执行第一个回调函数时作为第一个参数传入
- 回调函数接收四个参数,分别为累计值、当前元素、当前索引、原数组,后三者大家都比较熟悉了,主要来看第一个参数
- 在一次执行回调函数时,当前值和初始值相加得出结果1,该结果会在第二次执行回调函数时当做第一个参数传入
- 所以在第二次执行回调函数时,相加的值分别就是1和2,以此类推,循环结束后得到结果6
当然,reduce 还可以实现很多功能,例如可以通过 reduce 来实现 map 函数
const arr = [1, 2, 3];
const mapArray = arr.map(value => value * 2);
const reduceArray = arr.reduce((acc, current) => {
acc.push(current * 2)
return acc
}, []);
console.log(mapArray, reduceArray); // [2, 4, 6]
---END---