数组 (Array)

  • 数组也是一个对象,是一个用来存储数据的对象和Object类似,但是它的存储效率比普通对象要高
  • 数组中保存的内容我们称为元素
  • 数组使用索引(index)来操作元素
  • 索引指由0开始的整数

创建数组

数组由方括号构成,其中包含用逗号分隔的元素列表。

1
2
let arr1 = new Array();
let arr2 = [1,2,3,4,5];

访问和修改数组元素

可以使用括号表示法访问数组中的元素,与检索特定字符串字符的方法相同。

1
2
arr2[0];
// returns 1

也可以为数组提供新值来修改或者添加数组中的元素。

1
2
3
4
arr2[0] = 0;
arr2[5] = 6;
arr2;
// returns [0,2,3,4,5,6]

获取数组的长度

通过使用length属性获取数组的长度(数组中的元素个数)。

1
2
arr2.length;
// returns 6

一些数组方法

字符串和数组之间的转换

有时候,我们会看到一个包含在一个长长的字符串中的原始数据,想要将有用的项目分成更有用的表单,然后对它们进行处理,例如将它们显示在数据表中。我们可以使用 split() 方法。在其最简单的形式中,这需要一个参数,要将字符串分隔的字符,并返回分隔符之间的子串,作为数组中的项。

1
2
3
4
5
6
let myData = 'Xiamen,Quanzhou,Putian,Fuzhou,Longyan,Zhangzhou';
let myArray = myData.split(',');
myArray;
// returns ['Xiamen', 'Quanzhou', 'Putian', 'Fuzhou', 'Longyan', 'Zhangzhou']
myArray.length;
// returns 6

我们也可以用 join() 方法或者 toString() 进行相反的操作,如:

1
2
3
4
5
let myNewString = myArray.join(',');
myNewString;
// returns 'Xiamen,Quanzhou,Putian,Fuzhou,Longyan,Zhangzhou'
myArray.toString();
// returns 'Xiamen,Quanzhou,Putian,Fuzhou,Longyan,Zhangzhou'

toString()方法更简单,不需要参数,但也代表着是有限制的—它不能转换使用逗号以外的分隔符的字符串。

添加和删除数组元素

使用 push() 可以添加一个或多个元素到数组末尾,方法调用完成时,将返回数组的新长度。首先来看看的例子:

1
2
3
4
5
let newLength = myArray.push('Dehua');
myArray;
// returns ['Xiamen', 'Quanzhou', 'Putian', 'Fuzhou', 'Longyan', 'Zhangzhou', 'Dehua']
newLength;
// returns 7

使用 pop() 可以删除数组最后一个元素,并且返回已删除的元素。

1
2
3
4
5
let removedItem = myArray.pop();
myArray;
// returns ['Xiamen', 'Quanzhou', 'Putian', 'Fuzhou', 'Longyan', 'Zhangzhou']
removedItem;
// returns 'Dehua'

unshift()shift() 从功能上与 push()pop() 完全相同,只是它们分别作用于数组的开始,而不是结尾。

1
2
3
4
5
6
7
8
myArray.unshift('Ningde');
myArray;
// returns ['Ningde', 'Xiamen', 'Quanzhou', 'Putian', 'Fuzhou', 'Longyan', 'Zhangzhou']
let removedItem = myArray.shift();
myArray;
// returns ['Xiamen', 'Quanzhou', 'Putian', 'Fuzhou', 'Longyan', 'Zhangzhou']
removedItem;
// returns 'Ningde'

其他常用方法

  1. slice() 从一个数组中截取特定范围的元素并将这些元素以数组的形式返回,不改变原数组

    1
    2
    3
    let mySlice = myArray.slice(1,3)
    mySlice;
    // returns ['Quanzhou', 'Putian']
  2. splice() 删除或者添加元素,直接改变原数组,返回值为删除的元素

  3. concat() 可以将两个或者多个数组连接成一个数组,不会改变原数组

    1
    2
    3
    4
    5
    let mySlice2 = myArray.slice(3,5)
    mySlice2;
    // returns ['Fuzhou', 'Longyan']
    mySlice.concat(mySlice,mySlice2)
    // returns ['Quanzhou', 'Putian', 'Fuzhou', 'Longyan']
  4. reverse() 调换数组中元素的排列顺序,会修改原数组

  5. sort()

    • 给数组中的元素排序,默认以Unicode编码顺序排列,因此直接对数组中的数字排序会产生预料外的结果
    • 可以传递一个回调函数作为sort的参数,回调函数中有两个形参分别表示数组中一前一后的两个元素
      • 函数的返回值决定是否交换这个两个元素,当返回值大于0时交换,小于0时不交换,等于0时认为两个值相等不交换
    • 会直接修改原数组的元素,与方法的返回值相同