数组存储一系列同一种数据类型的值。 但在JavaScript里,也可以在数组中保存不同类型的值。(最好别这么做,大多数语言没这个能力)
1.创建和初始化数组
var arr = new Array(); var arr = new Array(7); var arr = new Array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday");
使用new关键字,能简单地声明并初始化一个数组,还可以构建一个指定长度的数组,也可以直接将数组元素作为参数传递给它的构造器。
使用new创建数组并不是最好的方式,我们可以使用字面量的形式即可。
如下:
var arr =[]; var arr =["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];
可以用数组的length属性,查看数组的长度
console.log(arr.length);//7
可用for循环遍历数组,打印输出所有的元素
for (var i =0;i当你想访问数组中特定位置的元素,可以向中括号传递数值。如:arr[2];
2.添加和删除元素
在javascript中,数组是一个可以修改的对象。如果添加元素,它就会动态增长。在C和Java等其他语言里,我们要决定数组的大小,想添加元素就要创建一个全新的数组,不能简单地往其中添加所需的元素。 比如有个数组var num = [1,2,3,4,5,6,7]; 1. push() javascript中的push()方法,能把元素添加到数组的末尾,还可以添加任意个元素。
num.push(8); num.push(9,10);如果输入num的话,就会看到1-10的值。
2. pop()方法: 要想删除数组中最后的元素,可以用pop()方法
num.pop();输入num的话,会看到1-9的值。
通过push()和pop()方法,就能用数组来模拟栈。这个稍后讲解栈的知识.
3.****unshift()方法,可以直接把数值插入数组的首位。
num.unshift(0); num.unshift(-2,-1);输出结果为 [-2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
4.shift()方法 : 要想移出数组中的第一个元素,num.shift();输出结果为[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
通过shift()和unshift()方法,能用数组模拟的基本的队列数据结构,后续会讲解队列的知识。
3.二维数组和多维数组
javascript只支持一维数组,并不支持矩阵(二维数组)。但是,可以使用数组套数组的方式,实现矩阵或任一多维数组。
var num =[]; num[0]=[11,13,15,17,19]; num[2]=[12,14,16,18,10]; num[0]=[]; num[0][0] = 11; num[0][1] = 13; num[0][2] = 15; num[0][3] = 17; num[0][4] = 19; num[1]=[]; num[1][0] = 12; num[1][1] = 14; num[1][2] = 16; num[1][3] = 18; num[1][4] = 10; 数组中的内容如下:
如果想看这个矩阵的输出,可以创建一个通用函数,专门输出其中的值。
function printMatrix(myMatrix){ for(var i =0;i以此类推,可以用这种方式来处理多维数组。创建一个3x3的矩阵,每一格里包含矩阵的i行j列z深度之和。
var matrix3x3x3 = []; for (var i =0;i<3;i++) { matrix3x3x3[i]=[]; for (var j = 0;j<3;j++) { matrix3x3x3[i][j]=[]; for (var z= 0;z<3数据结构中有几个维度都没有关系,都可以用循环遍历每个维度访问所有格子。3x3x3的矩阵可以用立体图表示:
4.javascript的数组方法参考
在javascript中,数组是可以修改的对象。这意味着创建每个数组都有一些可用的方法。 下面列出数组的一些核心方法。
![]()
4.1数组合并:concat()
有多个数组,需要合并成一个数组。我们可以迭代各个数组,然后把每个元素加入最终的数组。但javascript提供了 concat()方法。concat()方法可以向一个数组传递数组、对象或是元素。数组会按照该方法传入的参数顺序连接指定数组。 如下:
var num1 = [1,2,3]; var num2 = [-3,-2,-1]; var num3 = 0; var num = num2.concat(num3,num1); console.log(num); //[-3, -2, -1, 0, 1, 2, 3]4.2 迭代器函数
javascript内置了许多数组可用的迭代方法。我的这篇博客有详细介绍,这里不赘述。https://blog.csdn.net/diligentkong/article/details/71533866
4.3 搜索排序
若想反序输出数组num = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15];要实现这样的功能,可以用reverse()方法,然后数组内元素就会反序。
num.reverse();//[15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1]我们用sort()方法试一下:
num.sort();//[1, 10, 11, 12, 13, 14, 15, 2, 3, 4, 5, 6, 7, 8, 9]咦?这样看起来不对吧。这是因为sort方法在对数组做排序时,把元素默认成字符串进行相互比较。
因此可以传入自己写的比较函数,因为数组里面都是数组,可以这样写:num.sort(function(a,b){ return a- b; });这段代码,对于b>a时,会返回负数,反之则返回正数。如果相等,返回0.
也就是说返回的是负数,就说明a比b小,这样sort就根据返回值的情况给数组做排序。具体可这样表述:
function compare(a,b){ if (a < b) { return -1; } if (a > b) { return 1; } return 0; } num.sort(compare);这是因为javascript的sort方法接收compare方法作为参数,然后sort会用它排序数组。
4.3.1 自定义排序
可以对任何对象类型的数组排序,也可以创建compare函数来比较元素。例如,对象Person中有名字和年龄。用年龄来排序。var Person =[ {name:'John',age:30}, {name:'Ana',age:20}, {name:'Hobby',age:18}, {name:'Chris',age:25} ]; 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));4.3.2 字符串排序
var names = ['Ana','ana','john','John']; console.log(names.sort());// ["Ana", "John", "ana", "john"]为什么会这样?这是因为javascript在做字符比较的时候,根据字符对应的ASCII值来比较的例如: A、J、a、j对应的ASCII值分贝是65,75,7,106。虽然在字母表里a最靠前,但是J的ASCII的值比a小,所以排在a前面。
修改,让sort忽略大小写names.sort(function(a,b){ if(a.toLowerCase() < b.toLowerCase()){ return -1; } if (a.toLowerCase() > b.toLowerCase()) { return 1; } return 0; }); ["Ana", "ana", "john", "John"]4.3.3 搜索
两个方法indexOf()返回与参数匹配的第一个元素的索引
lastIndexOf()返回与参数匹配的最后一个元素的索引console.log(num.indexOf(6));//4 console.log(num.lastIndexOf(6));//9 console.log(num.indexOf(10));//-1不存在返回-1
4.3.4 输出数组为字符串1. 把数组所有元素输出为一个字符串,toString()方法
console.log(num.toString());//1,2,3,4,6,7,8,6,9,62. 用不同的分隔符(-)把元素隔开。用join()方法
var numString = num.join('-'); console.log(numString); //1-2-3-4-6-7-8-6-9-6数组的讲解暂告一段落。