不一样的JavaScript(7)——数组

1. 在Javascript中,我们可以用new Array()来创建一个数组,然后用下表读写数组中的元素。例如:

var array1 = new Array();
array1[0] = "a";
array1[1] = 1;
array1[2] = true;

for(var i = 0; i < array1.length; ++i) {
    console.log(array1[i]);
}
上述代码创建一个数组,并为数组添加三个元素。我们注意到数组中元素没有必要是同一类型。在上述例子中,三个元素分别是字符串、数字和布尔值。接着三个值按照他们下标的顺序被分别输出。

另外,我们还有更加简洁的方式创建并初始化数组:

var array2 = ["a", 1, true];
array2和前面array1包含相同的三个元素。和很多语言不同的是,初始化数组时使用的是[],而不是{}。

2. 数组的长度不是固定不变的。当我们用超出当前数组长度的下标去写元素时,将会自动往数组中添加元素。当我们用超出当前数组长度的下标去读元素时,将会得到undefined。请看如下代码:

var array = [0, 1, 2];
array[10] = 10;

console.log("length: " + array.length);

for(var index in array) {
    console.log(index + ": ", array[index]);
}

console.log(array[20]);
在上述代码中,我们创建一个数组并初始化前三个元素。接下来我们把下标为10的元素的值设为10。这个时候数组的长度会被自动扩充为11。因此上述代码的第一行输出是11。下标从3到9的7个位置现在是空的。只有前三个以及下标为10的四个位置有元素。因此接下来输出4行,分别是0: 0、1: 1、2: 2、10: 10。

接下来我们试图读取下标为20的值。由于此时下标为20的位置还没有设置,因此最后一行的返回值是undefined。

3. Javascript的数组提供了很多函数,是的它不仅实现了其他语言的数组的功能,还提供了更多更加灵活的功能。

3.1 下面的代码显示了数组的一些基本功能:

var array1 = [1, 2];
var array2 = [4, 3, 2];
var array3 = [5, 6];

var array4 = array1.concat(array2, array3);
console.log(array4); // [1, 2, 4, 3, 2, 5, 6] 

var index1 = array4.indexOf(2);      
var index2 = array4.lastIndexOf(2);  
console.log(index1); // 1
console.log(index2); // 4

var str = array4.join("; ");
console.log(str); // 1; 2; 4; 3; 2; 5; 6

var array5 = array4.slice(2, 5);
console.log(array5); // [4, 3, 2]

array4.sort();
console.log(array4); // [1, 2, 2, 3, 4, 5, 6]

在上面的代码中,函数concat拼接两个或者多个数组;indexOf和lastIndexOf在数组中查找第一个和最后一个元素的下标;join把数组中的所有元素以指定的分隔符拼接成一个字符串;slice得到一数组的子数组;函数sort把一个数组排序。

sort的缺省行为是按照字符串的排序方式确定元素的先后顺序。如果数组的元素是数值,确定的排序行为可能不是我们所预期的。比如:

var array = [4, 20, 10, 7];
array.sort();
console.log(array); // 10,20,4,7

如果我们希望数组按照数值的大小排序,我们需要定义自己的元素比较函数:

var array = [4, 20, 10, 7];

function compare(a, b) {
    return a - b;
}

array.sort(compare);
console.log(array); // 4,7, 10, 20

另外,理由sort函数还能实现用随机打乱数组元素的功能:

var array = [1, 2, 3, 4, 5, 6];

array.sort(function() {
    return 0.5 - Math.random();
});

console.log(array);
上述代码运行之后,数组array中的元素的顺序会被随机打乱,每次输出的数组都将是不一样的。

3.2 数组还提供了push和pop两个函数,使得数组具备了栈的功能:

var array = [1, 2];

array.push(3); // [1, 2, 3] 
console.log(array);

array.push(4); // [1, 2, 3, 4]
console.log(array);

console.log(array.pop()); // 4
console.log(array.pop()); // 3
console.log(array); // [1, 2] 

在上述代码中,push每次往数组的末尾添加一个元素,而pop每次把数组的末尾的数组删除一个元素。

3.3 数组还提供了shift和unshift两个函数,使得数组具备了队列的功能:

var array = [1, 2];

array.unshift(3);
console.log(array); // [3, 1, 2]

array.unshift(4);
console.log(array); // [4, 3, 1, 2]

console.log(array.shift()); // 4
console.log(array.shift()); // 3
console.log(array); // [1, 2]
在上述代码中,unshift每次往数组的头部添加一个元素,而shift每次删除数组的第一个元素。

3.4 splice是数组的成员函数中功能最灵活的一个,能在任意位置删除、添加和替换若干元素。
var array1 = [1, 2, 3, 4, 5, 6, 7];
array1.splice(3, 2);
console.log(array1); // [1, 2, 3, 6, 7]

var array2 = [1, 2, 3, 4, 5, 6, 7];
array2.splice(-3, 2);
console.log(array2); // [1, 2, 3, 4, 7]
splice的第一个参数是要删除的元素的起始下标。如果第一个参数是负数,表示从最后一个元素往前数的位置。-1表示最后一个元素,-2表示倒数第二个元素,其他以此类推。splice的第二个参数表示要删除的元素的个数。

如果splice有两个以上的参数,后面的参数是指在删除指定的元素之后在删除的位置添加的元素:

var array1 = [1, 2, 3, 4, 5];
array1.splice(2, 2, -1);
console.log(array1); // [1, 2, -1, 5]

var array2 = [1, 2, 3, 4, 5];
array2.splice(2, 2, -1, -2);
console.log(array2); // [1, 2, -1, -2, 5]

var array3 = [1, 2, 3, 4, 5];
array3.splice(2, 2, -1, -2, -3);
console.log(array3); // [1, 2, -1, -2, -3, 5]
如果第二个参数为0,则没有元素被删除,此时splice的功能相当于往数组的指定位置添加元素:
var array = [1, 2, 3, 4, 5];
array.splice(2, 0, -1, -2);
console.log(array); // [1, 2, -1, -2, 3, 4, 5] 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值