26. JS 数组
26. JS 数组
数组是什么
数组是一种特殊的对象
JS其实没有真正的数组,只是用对象模拟数组
JS的数组不是典型数组
典型的数组
元素的数据类型相同
使用连续的内存存储
通过数字下标获取元素
但JS的数组不这样
元素的数据类型可以不同
内存不一定是连续的(对象是随机存储的)
不能通过数字下标,而是通过字符串下标
这意味着数组可以有任何key,比如let arr = [1,2,3] ,arr['xxx'] = 1
创建一个数组
新建
转化
如何有0,1,2,但是长度是错的,会得到什么样的数组。
伪数组
伪数组的原型链中并没有数组的原型,就是没有push这些,就是伪数组。
伪数组可以通过Array.from()来创建成数组。
合并两个数组,得到新数组
截取一个数组的一部分
arr1.slice(1)从第二个元素开始
arr1.slice(0)全部截取,经常用于浅拷贝/复制一个数组。
注意,JS只提供浅拷贝
增删改查
删元素
跟对象一样
如果直接改length可以删元素吗?
我X,居然可以
JS真神奇
重要:不要随便改length
删除头部的元素
删除尾部的元素
删除中间的元素
遍历数组
查看所有元素
查看所有属性名
查看数字(字符串)属性名和值
问:用for和forEach的区别是什么?
答:答题点,比如for能做到的,forEach做不到
大多数情况下,两者都一样,只有一种情况是不一样的,就是for里面有continue和break,而forEach则没有。
forEach是一个槛
自己写forEach才能理解forEach
.forEach用for访问array的每一项
对每一项调用fn(array[i],i,array)
为什么要传入array呢?不为什么,规定如此。
.forEach返回的是undefined
查看单个属性
跟对象一样
索引越界
举例
报错:cannot read property 'toString' of undefined
查找某个元素是否在数组里
使用条件查找元素
使用条件查找元素的索引
增加数组中的元素
不要使用arr[x]= xxx这种方式在数组上添加元素
在尾部加元素
在头部加元素
在中间添加元素
修改数组中的元素
反转顺序
如何反转字符串?
自定义顺序
只需要判断哪个大哪个小,排序的事情不用管
0:一样大
1:左边的大
-1:右边的大
数组变换
三个非常重要的数组变换函数.map, .filter, .reduce,都是返回新数组,不会改变原数组

.map
.mapn变n,会返回新数组,不会改变原数组
.filter
.filter.reduce
.reducereduce是最屌的函数,有了reduce就不需要map,map只是个语法糖而已。
有了reduce,也不需要filter
作业
第一题
把数字变成星期
第二题
找出所有大于60分的成绩
第三题
算出所有数字之和
面试题
数据变换
最后更新于
这有帮助吗?