开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第7天,点击查看活动详情
一、JavaScript中数组方法
对于任何一门语言包含但不仅限于JavaScript来说,其提供的诸多方法,本意就是为了更好的开发,将或复杂或简单的一些功能封装,使用者仅仅通过封装的方法即可实现相应的功能,一些方法确实很好用,却没有很好的利用起来,其原因无外乎以下几种:
- 不知道、没见过
- 有点印象,不咋会用、忘了,管他呢
- 会一个就好了,能用就行(代码和人有一个能跑就行🤔)
没错,这三个问题我全“栈”了
总结:广度、深度、态度
所以说有问题就解决问题:
多读文档、书籍,留印象,遇到不会去找答案而不是跳过,做笔记总结,方便回顾
| 方法 | 描述 |
|---|---|
| push | 数组的末尾插入元素 |
| unshift | 数组的开头插入元素 |
| pop | 从数组的末尾删除元素 |
| shift | 数组的开头删除元素 |
| splice | 在数组的任意位置添加或删除元素 |
| concat | 连接两个或更多数组,并返回结果 |
| filter | 对数组中的每个元素给定函数,返回该函数会返回true的元素组成的数组 |
| forEach | 返回第一个与给定参数相等的数组元素的索引,没有找到则返回-1 |
| lastIndexOf | 返回在数组中搜索到的与给定参数相等的元素的索引里最大的值 |
| map | 对数组中的每个元素运行给定函数,返回每次函数调用的结果组成的数组 |
| reserve | 颠倒数组中元素的顺序,原先第一个元素现在变成最后一个,同样原先的最后一个元素变成了现在 的第一个 |
| slice | 传入索引值,将数组里对应索引范围内的元素作为新数组返回 |
| sort | 按照字母顺序对数组排序,支持传入指定排序方法的函数作为参数 |
| toString | 将数组作为字符串返回 |
| valueOf | 和 toString 类似,将数组作为字符串返回 |
| every | 对数组中的每个元素运行丢给一个函数,如果该函数对每个元素都返回 true,则返回 true |
| some | 对数组中的每个元素运行给定函数,如果任一元素返回 true,则返回 true |
二、迭代器函数
迭代数组中的元素,最直接简单的方法就是使用循环语句来循环遍历,但JS却内置了很多数组的迭代方法,人家给都给了,为什么不用呢?
既然是迭代总要来个迭代对象把,所以他来了
来个数组:
let array = [1,2,3,4,5,6,7,8,9,10]
直接遍历没意思,加点料:
来个函数(如果元素偶数,函数返回true,否则返回false):
const isEven = x => {
console.log(x); //方便直观的看到迭代过程
return x % 2 === 0;
}
上菜!!!
1、用every方法迭代
行为: 方法会迭代数组中的每个元素,直到返回 false。
console.log(array.every(isEven));
可以看到:array的第一个元素是1(奇数),所以isEven函数会返回false,然后every执行结束。
2、用 some 方法迭代
行为: 和every的行为相反,迭代数组的每个元素,知道函数返回true
console.log(array.some(isEven));
可以看到:array的第一个偶数是2(即第二个元素),第一个被迭代的元素(1)的经过函数返回false,第二个迭代元素是2,函数返回true,迭代结束。
3、用forEach方法迭代
如果要迭代整个数组,可以用forEach方法, 和for循环的结果相同。
array.forEach(x => console.log(x % 2 === 0));
4、使用 map 和 filter 方法
共同点:一个会返回新数组的迭代方法
区别
先看map:
const newArray = array.map(isEven);
console.log(newArray.toString());
再看filter:
const newArray = array.filter(isEven);
console.log(newArray.toString());
可以看到,两者的区别很明显,前者(map)返回的数组里存放的是每个元素经过函数判断的返回值(boolean值),而后者(filter)返回的数据里存放的是经过函数判断为true的对应元素, 由函数返回 true 的元素组成。
5、 使用 reduce 方法
reduce 方法接收一个有如下四个参数的函数:previousValue、 currentValue、index 和 array。因为 index 和 array 是可选的参数,所以如果用不到它们 的话,可以不传。这个函数会返回一个将被叠加到累加器的值,reduce 方法停止执行后会返回 这个累加器
示例:对一个数组中的所有元素求和
console.log(array.reduce((previous, current) => previous + current)); //55