Snake's Home

js_array

创建数组

在实际生产中,创建数组的方式基本有两种。

使用Array构造函数

可以使用Array构造函数来创建数组,如下所示:

arr = new Array();output: []```
1
上面的代码就是创建了一个空的数组[]。可以通过数组的length属性验证。

```console.log(arr.length); //output: 0

如果预先知道要创建的数组的项目数量,可以在构造函数中传递该数量:

arr = new Array(5);output: [undefined × 5]```
1
这个时候,该数量会自动变成数组的length值:

```console.log(arr.length); //output: 5

也可以向构造函数Array直接传入需要创建的数组中应该包含的数组项:

arr = new Array('a', 'b', 'c');output: ["a", "b", "c"]```
1
从上面几个简单的示例,我们可以得知,通过Array构造函数创建数组,我们可以:

创建一个空数组: ```new Array()

创建一定数量的数组:

Array(5)```
1

创建指定数组项目的数组: ```new Array('a','b','c')

需要注意的是,当只给new Array()传递一个值创建数组时,问题会变得比较复杂。如果传递的是一个数值,则会按该数值创建包含给定项数的数组;如果传递的是其它类型的参数时,则会创建包含那个值的只有一项的数组。来看个简单的示例:

1
2
3
4
5
6
7
var arr1 = new Array(3); // 创建一个包含3项的数组
var arr2 = new Array('3'); // 创建一个包含1项的数组,该项的值为字符串"3"

console.log(arr1); //[undefined × 3]
console.log(arr2); // ["3"]
console.log(arr1.length); // 3
console.log(arr2.length); // 1

在实际生产中,使用Array构造函数创建数组时,还可以省略new操作符。如:

1
2
var arr1 = Array('china');  // "china" arr1.length=1
var arr2 = new Array('china'); // "china" arr2.length=1

使用[]创建数组

除了使用Array构造函数创建数组之外,还可以直接使用[](数组字面量表示法)创建数组。采用这种方式创建数组时,数组的每个数组项之间以逗号(,)分隔开,如下所示:

1
2
var arr1 = ['a','b']; //创建一个包含两个字符串的数组
var arr2 = []; //创建一个空数组

数组元素的访问
前面也说过,数组每一项都有对应的索引号,而且其索引号从0开始,到数组的length值结束。在实际生产中,总是需要访问数组的数组项,我们就可以通过数组的索引号来访问数组元素。如:

1
2
3
4
5
var colors = ['blue','red','green']; //创建了一个字符串数组
console.log(colors[0]); // output: "blue"
console.log(colors[1]); // output: "red"
console.log(colors[2]); // output: "green"
colors[0]方括号[]中的索引表示要访问的数组元素。

很多时候我们需要对JavaScript中数据类型(Function、String、Number、Undefined、Boolean和Object)做判断。在JavaScript中提供了typeof操作符可以对这些常用的数据类型做判断。

typeof操作符

typeof可以解决大部分数据类型的检测,如:

1
2
3
4
5
6
7
console.log(typeof function () {return;}); // function
console.log(typeof "a"); // string
console.log(typeof 123); // number
console.log(typeof a); //undefined
console.log(typeof true); // boolean
console.log(typeof NaN); // number
console.log(typeof !NaN); //boolean

push()方法可以在数组的末属添加一个或多个元素

shift()方法把数组中的第一个元素删除

unshift()方法可以在数组的前端添加一个或多个元素

pop()方法把数组中的最后一个元素删除

sort()方法

sort()方法对数组的元素做原地的排序,并返回这个数组。默认情况下,sort()方法是按升序排列数组项。即最小的值位于最前面,最大的值排列在最后面。为了实现排序,sort()方法会调用每个数组项的toString()转型方法,然后比较得到的字符串,以确定如何排序。

push()

使用push()方法可以给数组末尾添加一个或多个数组项。

var arr = [];
arr.push(‘a’,’b’);
console.log(arr); // [‘a’,’b’]

unshift()

使用push()方法可以给数组末尾添加一个或多个数组项,那么使用unshift()方法可以在数组的前面添加一个或多个数组项:

var arr = [‘a’,’b’];
arr.unshift(1,2);
console.log(arr); // [1, 2, “a”, “b”]
除了这两种方法之外,还可以使用splice()方法给数组添加数组项:

var arr = [‘a’,’b’,’c’,1,2];
arr.splice(2,0,’d’,’c’,’e’);
console.log(arr); // [“a”, “b”, “d”, “c”, “e”, “c”, 1, 2]

另外除了splice()方法之外还可以使用concat()方法可以给数组添加数组项,只不过使用这种方法不会改变原数组,会在原数组中创建一个新数组:

var arr = [‘a’,’b’,’c’];
var arr2 = arr.concat(‘d’,1,2,[‘e’,3]);
console.log(arr); // [“a”, “b”, “c”]
console.log(arr2); // [“a”, “b”, “c”, “d”, 1, 2, “e”, 3]
删除数组项

对于数组的操作,除了增加数组项,很多时候还需要对数组进行删除操作。删除数组项常用的方法有pop()和shift()两种方法。

pop()

pop()方法可以从数组的末尾删除一个数组项:

var arr = [‘a’,’b’,’c’,’d’,1,2];
arr.pop();
console.log(arr); // [“a”, “b”, “c”, “d”, 1]

shift()

shift()方法和pop()方法刚好相反,它可以删除数组的第一项:

var arr = [‘a’,’b’,’c’,’d’,1,2];
arr.shift();
console.log(arr); // [“b”, “c”, “d”, 1, 2]
不管是pop()或shift()方法每次只能给数组删除一个数组项,但很多时候这样删除数组项相对来说是比较麻烦的。在数组的操作中,除了这两种方法之外,还可以通过slice()和splice()方法来删除数组项。

slice()

slice()方法可以给一个数组中删除多个数组项,只不过不同的是,slice()不会影响原数组,只是会在原数组基础上创建一个数组副本:

var arr = [1,2,3,4,’a’,’b’];
var arr2 = arr.slice(2);
console.log(arr); // [1, 2, 3, 4, “a”, “b”]
console.log(arr2); // [3, 4, “a”, “b”]
console.log(arr3); // [“a”, “b”]

splice()

splice()方法除了能给数组添加数组项之外,还可以给数组删除数组项:

var arr = [1,2,3,4,’a’,’b’,’c’];
var arr2 = arr.splice(2,2);
console.log(arr); // [1, 2, “a”, “b”, “c”]
console.log(arr2); // [3, 4]
改变数组

数组中splice()方法是数组中一个强大的方法,其除了可以给数组添加数组项、删除数组项之外,还可以改变一个数组:

var arr = [1,2,3,4,5,6];
var arr2 = arr.splice(2,3,’a’,’b’,’c’);
console.log(arr); // [1, 2, “a”, “b”, “c”, 6]
console.log(arr2); // [3, 4, 5]

数组的查询

这里所说的数组查询其实指的是数组的查询提取。其使用的方法是slice()方法:

var arr = [1,2,3,4,5,6];
var arr2 = arr.slice(-3);
console.log(arr); // [1, 2, 3, 4, 5, 6]
console.log(arr2); // [4, 5, 6]