13.javascript的数组

1.数组介绍

Array是JavaScript的内置函数,同时也是有一个构造函数,可以用它生成新的数组。

var arr=new Array(2);

arr.length //2

arr  //undefined*2

注:var arr=new Array(2)和var arr=Array(2)的写法是等价的,我更习惯用第二种,应为可以少些几个字啊!

2.数组方法

Array.isArray方法判断一个值是不是为空数组。

var a=[1,5,6];
typeof a;   //object
Array.isArray(a);  //true

3.Array实例的方法

3.1 valueOf方法返回数组本身。

var a=[1,2,3];
a.valueOf(); //[1,2,3]

3.2 toString方法返回数组的字符串形式。

var a=[1,2,3];
a.toString(); //1,2,3
var a=[1,2,3,[4,5,6]];
a.toString();   //1,2,3,4,5,6

3.3push 方法用于在数组的末端添加一个或多个元素,并且返回新元素后的数组长度。

var a=[];
a.push(1);
a.push('a');
a.push(true,{});
a  //[1,'a',true,{}]

如果需要合并两个数组,可以这样写。

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

Array.prototype.push.apply(a, b)
// 或者
a.push.apply(a, b)

// 上面两种写法等同于
a.push(4, 5, 6)

a // [1, 2, 3, 4, 5, 6]

3.4pop() 用于删除数组的最后一个元素,并返回该元素,该方法会改变元来的数组。

var a=['a','b','c','d'];
a.pop();
a //['a','b','c']

3.5join()以参数作为分隔符,将所有数组成员组成一个字符串返回,如果不提供参数,默认使用逗号分隔。

var a=[1,2,3,4,5];
a.join(' ');  //1 2 3 4 5
a.join('|');  //"1|2|3|4|5"
a.join();  //"1,2,3,4,5"

//通过call方法,这个方法也可以用于字符串
Array.prototype.join.call('zhanglei','_');
//"z-h-a-n-g-l-e-i"

3.6concat()用于多个数组的合并,将新数组添加多数组的尾部,返回一个新的数组 ###。

[1,2,3].concat(4,5,6);
//等价于
[1,2,3].concat(4,[5,6]);

3.7shift() 用于删除数组的第一个元素,并返回该元素。

var a=['a','b','c','d'];

a.shift();  //'a'
a  //['b','c','d']

//清空数组
var list=[1,2,3,4,5,6];
var item;

while(item = list.shift()){
    console.log(item);
}

list //[]

3.8unshift() 用于在数组的第一个位置添加元素,并返回新添加的数组的数组长度,该方法会改变数组的长度。

var a = ['a', 'b', 'c'];

a.unshift('x'); // 4
a // ['x', 'a', 'b', 'c']
//unshift方法可以在数组头部添加多个元素。

var arr = [ 'c', 'd' ];
arr.unshift('a', 'b') // 4
arr // [ 'a', 'b', 'c', 'd' ]

3.9reverse() 用于颠倒数组中的元素顺序,返回改变后的数组,该方法会改变原来的原数组。

var a = ['a', 'b', 'c'];

a.reverse() // ["c", "b", "a"]
a // ["c", "b", "a"]

3.10 slice()用于提取数组的一部分,返回一个新的数组,原数组不变。

// 格式
arr.slice(start_index, upto_index);

// 用法
var a = ['a', 'b', 'c'];

a.slice(0) // ["a", "b", "c"]
a.slice(1) // ["b", "c"]
a.slice(1, 2) // ["b"]
a.slice(2, 6) // ["c"]
a.slice() // ["a", "b", "c"]
//上面代码中,最后一个例子slice没有参数,实际上等于返回一个原数组的拷贝。

//如果slice方法的参数是负数,则表示倒数计算的位置。

var a = ['a', 'b', 'c'];
a.slice(-2) // ["b", "c"]
a.slice(-2, -1) // ["b"]
//上面代码中,-2表示倒数计算的第二个位置,-1表示倒数计算的第一个位置。

//如果参数值大于数组成员的个数,或者第二个参数小于第一个参数,则返回空数组。

var a = ['a', 'b', 'c'];
a.slice(4) // []
a.slice(2, 1) // []

3.11splice()用于删除原数组的一部分成员,并在被删除的位置添加新的数组成员,返回值是被删除的元素,该方法会改变原来的数组 ###。

// 用法
var a = ['a', 'b', 'c', 'd', 'e', 'f'];
a.splice(4, 2) // ["e", "f"]
a // ["a", "b", "c", "d"]
//上面代码从原数组4号位置,删除了两个数组成员。

var a = ['a', 'b', 'c', 'd', 'e', 'f'];
a.splice(4, 2, 1, 2) // ["e", "f"]
a // ["a", "b", "c", "d", 1, 2]
//上面代码除了删除成员,还插入了两个新成员。

//起始位置如果是负数,就表示从倒数位置开始删除。

var a = ['a', 'b', 'c', 'd', 'e', 'f'];
a.splice(-4, 2) // ["c", "d"]
//上面代码表示,从倒数第四个位置c开始删除两个成员。

//如果只是单纯地插入元素,splice方法的第二个参数可以设为0。

var a = [1, 1, 1];

a.splice(1, 0, 2) // []
a // [1, 2, 1, 1]
//如果只提供第一个参数,等同于将原数组在指定位置拆分成两个数组。

var a = [1, 2, 3, 4];
a.splice(2) // [3, 4]
a // [1, 2]

3.12sort()对数组元素进行排序,默认是按照字典顺序排序,排序后,改变后,原数组会改变。

['d', 'c', 'b', 'a'].sort()
// ['a', 'b', 'c', 'd']

[4, 3, 2, 1].sort()
// [1, 2, 3, 4]

[11, 101].sort()
// [101, 11]

[10111, 1101, 111].sort()
// [10111, 1101, 111]

数组以我的水平,常用的就是这些方法,如果还有其他的方法,欢迎评论