JavaScript 数组


数组是用来保存多个数据(元素)的集合,通过数组名和索引访问数组中的元素。


数组可以嵌套。数组也是对象,可以有属性和方法。

创建和访问数组

有4种创建数组的方法:

  • 通过new运算符和指定数组的长度或元素的方式。例如var arr = new Array(5);。new运算符是可选的。
  • 数组元素前后加上一个方括号,数组元素之间使用逗号分隔。例如var arr = [1, 2, 3];
  • 调用数组的map方法创建数组,返回一个包含在数组元素上执行回调函数所得返回值组成的新数组。
  • 调用数组的filter方法创建数组,返回一个包含回调函数返回值为true的元素组成的新数组。

下面是创建数组的例子:

<!DOCTYPE html><html><body><pre>
<script type="text/javascript">
  var a = [1, 2, 3];
  var a2 = new Array("apple", "banana", "pear");
  var a3 = Array(5);
  var a4 = a.map(function(e) {return 5 * e});
  var a5 = a.filter(function(e) {return e % 2 == 1});

  document.writeln("a : " + a); // 1,2,3
  document.writeln("a2[0] : " + a2[0]); // apple
  document.writeln("a3[0] : " + a3[0]); // undefined
  document.writeln("a4 : " + a4); // 5,10,15
  document.writeln("a5 : " + a5); // 1,3
</script>
</pre></body></html>

如果给数组赋值时的索引不是整数,则将做为数组的属性,而不是数组的元素。

增加、更改和删除元素

push方法往数组的最后增加一个或多个元素。unshift方法往数组的开头增加一个或多个元素。

使用[]运算符更改列表的一个元素。

pop方法从数组中移除最后一个元素并返回该元素。shift方法从数组中移除第一个元素并返回该元素。

下面是增加、更改和删除元素的例子:

<!DOCTYPE html><html><body><pre>
<script type="text/javascript">
  var a = [1, 2, 3];
  a.unshift("begin");
  a.push("end");

  var a2 = new Array("apple", "banana", "pear");
  var last = a2.pop();
  var first = a2.shift();

  document.writeln("a : " + a);   // begin,1,2,3,end
  document.writeln("a2 : " + a2); // banana
  document.writeln("a2[last] : " + last);   // pear
  document.writeln("a2[first] : " + first); // apple
</script>
</pre></body></html>

遍历数组

javascript中数组也是对象,数组索引是属性名,数组元素是属性的值。数组属性length表示数组长度,数组长度是最后一个数组元素的索引值加1。

有2种方式遍历数组:

  • 使用for循环遍历数组。
  • 使用数组的forEach方法遍历数组。

下面是遍历数组的例子:

<!DOCTYPE html><html><body><pre>
<script type="text/javascript">
  var a = [1, 2, 3];
  a[4] = 5;
  var a2 = new Array("apple", "banana", "pear");
  a2[10] = "orange";

  for (var i = 0; i < a.length; i++)
    document.writeln(`a[${i}] = ` + a[i]);

  document.writeln("");
  a2.forEach(function(fruit, i) {
    document.writeln(`a[${i}] = ` + fruit);
  });
</script>
</pre></body></html>

数组排序

使用数组的sort方法对数组排序,可以使用一个回调函数参数来决定如何比较数组元素的大小。

下面是数组排序的例子:

<!DOCTYPE html><html><body><pre>
<script type="text/javascript">
  var a = ["orange", "apple", "banana"];
  a.sort();
  document.writeln("a : " + a); // apple,banana,orange

  var a2 = ["2", "1", "13"];
  a2.sort();
  document.writeln("a2 : " + a2); // 1,13,2

  var a3 = ["2", "1", "13"];

  var f = function(a, b) {
    return parseInt(a) - parseInt(b);
  };
  a3.sort(f);

  document.writeln("a3 : " + a3); // 1,2,13
</script>
</pre></body></html>

多维数组

多维数组指数组中元素也是数组的数组。多维数组包含的各元素数组的长度可以不同。

下面是多维数组的例子:

<!DOCTYPE html><html><body><pre>
<script type="text/javascript">
  var a = [[1, 2, 3], [3, 6, 9, 12]];
  a[2] = [5, 10];

  for (var i = 0; i < a.length; i++)
      for (var j = 0; j < a[i].length; j++) {
          document.writeln(`a[${i}][${j}] : ` + a[i][j]);
      }
</script>
</pre></body></html>