let arr = [1,2];
Object.prototype.toString.call(arr) === ‘[object Array]’; // true
- 创建数组的方法
- 字面量创建:
const arr = [];
- 使用
Array
构造函数:
const arr = new Array();
arr[0] = 1;
arr[1] = 2;
// 一个参数表示创建length为num的数组
const arr = new Array(3)
//多个参数表示创建包含这几项的数组
const arr = new Array(‘red’,‘yellow’,‘blue’)
算法题中,常使用new Array()
来初始化固定length
的数组:
const arr = new Array(7); // 表示创建一个长度为7的数组
再者,还可以通过fill()
方法来初始化数组里面的值:
const arr = new Array(7).fill(1); // [1,1,1,1,1,1,1]
需要注意的是fill()
有它的局限性,当给fill()
传入一个参数时,如果这个参数是引用类型,那么fill()
填充数组时填充的是入参的引用.比如初始化二维数组:
const arr = new Array(7).fill([]); // [[],[],[],[],[],[],[]]
arr[0][0] = 1;
console.log(arr); // [[1], [1], [1], [1], [1], [1], [1]];
可以看到,我们修改了第一个数组的值,后面的数组全都跟着更改了.
本着安全的原则,初始化二维数组可以用for
循环:
const arr = new Array(7);
for (let i = 0; i < arr.length; i++) {
arr[i] = [];
}
- 操作数组的方法
| 方法 | 说明 | 返回值 | 是否改变原数组 |
| :-: | :-: | :-: | — |
| push()
| 数组末尾添加任意项 | 返回修改后数组的长度 | 是 |
| pop()
| 移除数组最后一项 | 返回移除的项 | 是 |
| shift()
| 移除数组第一项 | 返回移除的项 | 是 |
| unshift()
| 数组首位添加任意项 | 返回修改后数组的长度 | 是 |
| reverse()
| 反转数组 | 返回修改后的数组 | 是 |
| sort()
| 数组排序 | 返回修改后的数组 | 是 |
| splice()
| 本质是:第一个参数为起始位置
第二个参数为删除的个数
第三个参数为插入的项
根据这个原理可实现三个功能,即删除,插入,替换 | 返回移除的项 | 是 |
| concat()
| 拼接两个数组 | 返回一个新数组 | 否 |
| slice()
| 接收一个参数,返回以该参数为索引到当前数组末尾的所有项
接收两个参数,返回起始到结束位置之间的项,注意不包括结束位置的项 | 返回一个新数组 | 否 |
sort()
-
默认情况下,
sort
按照升序排列数组项.该方法会调用每个数组项的toString()
方法,然后比较得到的字符串,再确定如何排序.即使数组中的每一项都是数值,sort
方法得到的也是字符串. -
sort()
可以接收一个compare
函数作为参数,来决定排序的规则.
compare
函数接收两个参数a,b
:
-
若排序后的数组
a
应该出现在b
之前,则返回一个负数; -
若排序后的数组
a
应该出现在b
之后,则返回一个正数; -
若两个参数相等,则返回
0
;
根据compare
的规则,升序的sort
可以传入一个compare
函数:
function compare(a, b) {
if (a < b) {
return -1; // 由于是升序,所以当a小于b时,a应该在b之前,返回负数
} else if (a > b) {
return 1; // 由于是升序,所以当a大于b时,a应该在b之后,返回正数
} else {
return 0;
}
}
进一步,可以简写成:
function compare(a, b) {
return a - b;
}
同样的,如果想实现一个降序的sort
,可以传入一个compare
函数:
function compare(a, b) {
return b - a;
}
- 查找数组的方法
indexOf()
和lastIndexOf()
接收两个参数——要查找的项和表示查找起点位置的索引(可选参数).其中,indexOf()
从数组的开头开始向后查找,而lastIndexOf()
从数组的结尾开始向前查找.
这两个方法都返回要查找的项在数组中的位置,或者在没找到的情况下返回-1
.
在比较第一个参数与数组中的每一项时,会使用全等操作符===
.也就是说,要求查找的项必须严格相等:
var person = {name:‘li’}
var people = [{name:‘li’}]
console.log(people.indexOf(person))//-1
var morePeople = [person]
console.log(morePeople.indexOf(person))//0
- 遍历数组的方法
| 名称 | 参数 | 返回值 | 说明 |
| :-: | :-: | :-: | :-: |
| forEach
| item
,index
,arr
| undefined
| return true
会终止当前迭代,不会终止整体迭代 |
| some
| item
,index
,arr
| boolean
| some
方法查找数组中是否有满足条件的元素,如果找到第一个满足条件的元素,则return true
终止循环. 不再继续查找 |
| every
| item
,index
,arr
| boolean
| every
方法查找数组中是否所有元素都满足条件,如果都满足,返回true
,有一个不满足则返回false
并终止循环 |
| filter
| item
,index
,arr
| 返回过滤后的数组 | filter
方法创建一个新的数组,主要用于筛选数组,
filter
中的回调函数有一个要求: 必须返回一个boolean值
当返回true时, 函数内部会自动将这次回调的 currentValue 加入到新的数组中
当返回false时, 函数内部会过滤掉这次的 currentValue |
| map
| item
,index
,arr
| 返回新的数组 | map
方法也是创建一个数组,新数组中的元素是通过回调函数的返回值决定的 |
| find
| item
,index
,arr
| 匹配的item
值 | find
用于筛选原数组中符合条件的某一项,找到则终止循环 |
| findIndex
| item
,index
,arr
| 匹配的index
值,找不到则返回-1 | findIndex
类似于find,用于筛选原数组中符合条件的某一项的索引,找到则终止循环 |
| reduce
| (preValue
,curValue
,index
,arr
)=> {},initValue
| 最后一次迭代的return
值 | reduce() 常用于对数组中所有的元素进行汇总,上述代码中 preValue 指的是前一次遍历中的 return 值,可以设置它的初始值(如上述代码中初始值为0 ) |
以forEach
为例
- 原数组的
item
是基本数据类型:
const array = [1, 2, 3, 4];
array.forEach(item => {
item = item * 3
})
console.log(array); // [1,2,3,4]未改变原数组
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)
最后
正值金三银四招聘旺季,很多小伙伴都询问我有没有前端方面的面试题,特地整理出来赠送给大家!
入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!**
[外链图片转存中…(img-XBTuKbrK-1713500900243)]
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)
[外链图片转存中…(img-cY0tymaH-1713500900243)]
最后
正值金三银四招聘旺季,很多小伙伴都询问我有没有前端方面的面试题,特地整理出来赠送给大家!