• JavaScript的数组中的元素可以具有不同的类型,即var a=['hello',12,'kk'];是合法的。
  • 对于一维数组,可直接用console.log(数组名)来输出数组内容,若是多维数组则需要自行构建函数来输出

创建和初始化数组

1
2
3
4
5
6
var everyday=new Array();
var everyday=new Array();
var everyday=new Array('hello','world',123,'china');

var evaryday=[];
var evaryday=['hello','world',123,'china'];

可使用everyday.length来获得数组的长度

添加和删除数组元素

添加到数组末尾

1
2
3
everyday[everyday.length]='新元素';

everyday.push('新元素1','新元素2');

添加到数组首部

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
2
3
4
5
6
7
8
var a1=[];
a1[0]=['hello',23,'world'];
a1[2]=['china','england'];

var a2=[];
a2[0]=[];
a2[0][0]='hello';
a2[0][1]='woeld';

此时用console.log(a2)将不能输出数组内容,因为console.log()之只能用来输出具体的元素,应该自行创建一个函数来简化输出

1
2
3
4
5
6
7
8
9
function printfMatrix(myMatrix){
for(var i=0;i<myMatrix.length;i++){
for(var j=0;j<myMatrix[i].length;j++){
console.log(myMatrix[i][j]);
}
}
}

printfMatrix(数组名);

操作数组的方法(函数)

数组合并–concat方法

mark

按照指定的顺序连接起来,很好理解

迭代器函数

every方法

every会迭代数组中的每一个元素,直到返回false

mark

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

some方法

every会迭代数组中的每一个元素,直到返回true

mark

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

forEach方法

foreach会迭代整个数组的元素

mark

map方法

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

mark

filter方法

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

mark

reduce方法

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

mark

搜索和排序

数组反序–reverse方法

就是将原本数组元素的排列顺序颠倒

mark

数组自动排序–sort方法

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

mark

那应该怎么办? 自己写比较函数

1
2
3
var a=[2,6,18,19,1];

console.log(a.sort(function(a,b){return a-b;}));

主要的是代码a.sort(function(a,b){return a-b;}),此代码表示当a小于b时返回负数,当a大于b时返回正数,相等时放回0,这样sort方法就会根据返回值的情况给数组排序,当然这行代码额可以改写成比较好理解的以下以下代码:

mark

注意比较函数的调用方法(没有传参)

自定义排序

可以创建任何对象类型的数组排序,也可以创建compareFunction来比较元素:

1
2
3
4
5
6
7
8
9
10
11
12
13
var person=[{name:'小明',age:15},{name:'小王',age:14},{name:'小东',age:18}];

function comparePerson(a,b){
if(a.age<b.age){
return -1;
}
if(a.age>b.age){
return 1;
}
return 0;
}

console.log(person.sort(comparePerson));

结果:

mark

字符串排序

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

mark

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

mark

搜索

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

例子:

mark

结果分析,前两个没什么好说的,第三个查找10,因为没有这个元素,所以返回-1

输出数组为字符串及指定分隔符

  • toString()将数组里的所有元素输出为一个字符串
  • join()用一个不同的分隔符把元素隔开

例子:

mark

是否改变原数组及操作后返回值

本题需要将数组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()
向数组的开头添加一个或多个元素
改变原数组
返回新数组的长度