JavaScript数组介绍
- JavaScript的数组中的元素可以具有不同的类型,即
var a=['hello',12,'kk'];是合法的。 - 对于一维数组,可直接用
console.log(数组名)来输出数组内容,若是多维数组则需要自行构建函数来输出
创建和初始化数组
1 | var everyday=new Array(); |
可使用everyday.length来获得数组的长度
添加和删除数组元素
添加到数组末尾
1 | everyday[everyday.length]='新元素'; |
添加到数组首部
1 | eveday.unshit('新元素1','新元素2'); |
删除最靠后元素
1 | everyday.pop(); |
用push()和pop()可以用数组来模拟栈
删除第一个元素
1 | everyday.shift(); |
用shift()和unshift()可以用数组模拟队列
删除任意位置的元素
1 | everyday.splice(2,3); |
注解:表示删除了从下标2的元素开始往后的两个元素(包括下标为2的),即everyday[2]、everyday[3]、everyday[4]。
插入任意为位置 任意值
1 | everyday.splice(2,0,5,3,6) |
注释:这才是splice()函数的完整用法。第一个参数是要执行删除操作的开始下标,第二个是要删除的个数,咱现在目的是为了添加,所以写0,第三个参数及以后则是要新添加的元素,此例执行后everyday[2]值变成5,以此类推。
二维和多维数组
JavaScript只支持一维数组,但由于JavaScript数组对元素类型的宽容性,我们可以采用数组套数组的方法来实现多维数组。
1 | var a1=[]; |
此时用console.log(a2)将不能输出数组内容,因为console.log()之只能用来输出具体的元素,应该自行创建一个函数来简化输出
1 | function printfMatrix(myMatrix){ |
操作数组的方法(函数)
数组合并–concat方法

按照指定的顺序连接起来,很好理解
迭代器函数
every方法
every会迭代数组中的每一个元素,直到返回false

注释:给每个元素迭代执行zhengshu这个方法(是小于0则继续迭代,直到遇到正数,返回false)
some方法
every会迭代数组中的每一个元素,直到返回true

注释:给每个元素迭代执行zhengshu这个方法(是大于0则继续迭代,直达遇到负数,返回true)
forEach方法
foreach会迭代整个数组的元素

map方法
map会生成一个数组,用来保存迭代所有元素时产生的结果

filter方法
filter会生成一个新数组,用来保存迭代所有元素时时函数返回true的元素

reduce方法
reduce接收一个函数作为参数,这个函数有四个参数:prevousValue、currentValue、index和array。这个函数会返回一个将被叠加到累加器的值,reduce方法停止执行后返回这个累加器。如果要对一个数组中的所有元素求和,这就很有用。

搜索和排序
数组反序–reverse方法
就是将原本数组元素的排列顺序颠倒

数组自动排序–sort方法
sort在排序的时候,是默认把元素当成字符串来比较。比如底下这样用就会出错:

那应该怎么办? 自己写比较函数
1 | var a=[2,6,18,19,1]; |
主要的是代码a.sort(function(a,b){return a-b;}),此代码表示当a小于b时返回负数,当a大于b时返回正数,相等时放回0,这样sort方法就会根据返回值的情况给数组排序,当然这行代码额可以改写成比较好理解的以下以下代码:

注意比较函数的调用方法(没有传参)
自定义排序
可以创建任何对象类型的数组排序,也可以创建compareFunction来比较元素:
1 | var person=[{name:'小明',age:15},{name:'小王',age:14},{name:'小东',age:18}]; |
结果:

字符串排序
对于字符创的比较,sort是根据ASCII值来比较的,比如:

即Jmn会排在apple的前面,如果我们想让它排序正确,则需要自己写一个忽略大小写的比较函数:

搜索
- indexOf()方法:返回与参数匹配的第一个元素的索引
- lastIndexOf()方法:返回与参数匹配的最后一个元素的索引。
例子:

结果分析,前两个没什么好说的,第三个查找10,因为没有这个元素,所以返回-1
输出数组为字符串及指定分隔符
- toString()将数组里的所有元素输出为一个字符串
- join()用一个不同的分隔符把元素隔开
例子:

是否改变原数组及操作后返回值
本题需要将数组a=[1,2,3]变成[1,2,3,4],需要改变原数组a。 Array对象常用方法中: 不改变原数组: 1、 concat() 连接两个或多个数组 不改变原数组 返回被连接数组的一个副本 2、join() 把数组中所有元素放入一个字符串 不改变原数组 返回字符串 3、 slice() 从已有的数组中返回选定的元素 不改变原数组 返回一个新数组 4、 toString() 把数组转为字符串 不改变原数组 返回数组的字符串形式 改变原数组: 5、 pop() 删除数组最后一个元素,如果数组为空,则不改变数组,返回undefined 改变原数组 返回被删除的元素 6、 push() 向数组末尾添加一个或多个元素 改变原数组 返回新数组的长度 7、 reverse() 颠倒数组中元素的顺序 改变原数组 返回该数组 8、 shift() 把数组的第一个元素删除,若空数组,不进行任何操作,返回undefined 改变原数组 返回第一个元素的值 9、 sort() 对数组元素进行排序(ascii) 改变原数组 返回该数组 10、 splice() 从数组中添加/删除项目 改变原数组 返回被删除的元素 11、 unshift() 向数组的开头添加一个或多个元素 改变原数组 返回新数组的长度