一、数组的定义
定义数组有如下几种方式:
1、使用new关键字定义空数组对象Array(): var arr = new Array();
2、使用new关键字定义具有长度的数组: var arr = new Array(19);
3、使用new关键字直接初始化数组: var arr = new Array(1,2,3,4,5);
4、使用字面量定义空数组:var arr = [];
5、使用字面量初始化数组:var arr = [1,2,3,4];
PS:创建数组时尽量使用字面量([]或[1,2,3])的方式,少用new Array()的方式进行创建。因为[]的性能略高,因为代码短。
二、数组的属性length
length既可以获取,也可以设置,从而改变数组
var arr = [1,2,4,5,6];
console.log(arr); //[1,2,4,5,6]
//获取length
console.log(arr.length); //5
//设置length
arr.length = 4;
console.log(arr); //[1,2,4,5]
//快速清空数组
arr.length = 0;
console.log(arr); //[]
console.log(arr.pop()); //undefined
三、数组的方法
1、数组元素头部尾部的添加、删除(不创建新数组,而是直接修改原有的数组)
(1)数组元素的添加:
array.push(value1,value2,...); //在数组的尾部依次添加一个或多个数组元素。直接修改array,而不是创建一个新的数组。
array.unshift(value1,value2,...); //在数组的头部添加一个或多个数组元素。。该方法的第一个参数将成为数组的新元素0,而第二个参数则将成为新元素1,以此类推。注意,unshift()不创建新数组,而是直接修改原有的数组。
参数value1,value2,...:可以是数字,字符,数组;
(2)数组元素的删除:
array.pop(); //删除数组的最后一个元素。如果数组已经为空,则pop()不改变数组,返回undefined。
array.shift(); //删除数组的第一个元素。如果数组是空的,shift()将不进行任何操作,返回undefined。注意,该方法不创建新数组,而是直接修改原有的数组。
var arr_1 = [1,2,3];
//在数组的尾部添加一个或多个值
arr_1.push(4,5,6);
console.log(arr_1); //[1,2,3,4,5,6]
//删除数组尾部最后一个元素
arr_1.pop();
console.log(arr_1); //[1,2,3,4,5]
//删除数组头部的第一个元素
arr_1.shift();
console.log(arr_1); //[2,3,4,5]
//在数组头部添加一个或多个值
arr_1.unshift(-1,0);
console.log(arr_1); //[-1,0,2,3,4,5]
arr_1.length = 0;
console.log(arr_1.pop()); //undefined
console.log(arr_1.shift()); //undefined
console.log(arr_1); //[]
2、在数组中插入、删除、替换元素:splice(start,deleteCount,value1,value2,...)
描述:splice()方法将删除从start开始(包括start所指的元素在内)的零个或多个元素,并且用参数列表中声明的一个或多个value值来替换那些被删除的元素。位于插入或删除的元素之后的数组元素都会被移动,以保持它们与数组其他元素的连续性。
(1)start:开始插入和(或)删除的数组元素的下标;
(2)deleteCount:从start开始,包括start所指的元素在内要删除的元素个数。该参数可选,若没有指定它,splice()将删除从start开始到原数组结尾的所有元素。
(3)value1,value2,...:从start开始要插入数组的零个或多个元素。
//splice():插入、删除、替换,先删除后插入
var arr_2 = [-1,0,1,2,3,4]
//在数组中删除指定的元素
arr_2.splice(4);
console.log(arr_2); //[-1,0,1,2]
arr_2.splice(1,2);
console.log(arr_2); //[-1,2]
//在数组中指定位置插入指定的元素
arr_2.splice(1,0,3,4,5);
console.log(arr_2); //[-1,3,4,5,2]
//在数组中对指定的数组元素进行替换
arr_2.splice(1,2,8,9);
console.log(arr_2); //[-1,8,9,5,2]
3、数组的连接
(1)array.concat(value1,value2,...); //连接数组。该方法将创建并返回一个新数组,这个数组是将所有参数都添加到array中生成的。它并不修改array。若要进行concat()操作的参数是一个数组,那么添加的是数组中的元素,而不是数组。
参数value1,value2,...:可以任意多个,可以是数字,字符,数组(一维数组、二维数组...)等
(2)array.join(separator); //将数组元素通过某种分割符连接起来以构建一个字符串。返回生成的字符串。
参数separator:指定在返回的字符串中用于分隔数组元素的字符或字符串,可选。若省略了这个参数,用逗号作为分隔符。
//数组的连接
var arr_3 = ["a","b","c"];
var arr_4 = ["e","f","g"];
console.log(arr_3.concat(arr_4)); //["a","b","c","e","f","g"]
console.log(arr_3.concat("m","n")); //["a", "b", "c", "m", "n"]
console.log(arr_3.concat(arr_4,["h","i","j"])); //["a", "b", "c", "e", "f", "g", "h", "i", "j"]
console.log(arr_3.join("-")); //a-b-c 字符串
console.log(arr_3.join("")); //abc 字符串
console.log(arr_3.join(" ")); //a b c 字符串
console.log(arr_3.join()); //a,b,c 字符串
4、数组的排序:array.sort(orderfunc); //对数组元素进行排序
A、描述:sort()方法将在原数组上对数组元素进行排序,即排序时不创建新的数组副本。若调用方法sort()时没有使用参数,将按字母顺序(确切地说是按照字符编码的顺序,是一种升序的方式)对数组中的元素进行排序。为实现排序,sort()方法调用每个数组项的toString()特型方法, 然后比较得到的字符串来确定排序。即使数組中的每一项都是数值,sort()方法比較的也是字符串。
B、参数orderfunc:可选,用来指定按什么顺序进行排序的函数。
C、比较函数:
如果想按照别的顺序进行排序,就必须提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数a和b,其返回值如下:
a、如果根据你的评判标准,a小于b,在排序后的数组中a应该出现在b之前,就返回一个小于0的值。
b、如果a等于b,就返回0。
c、如果a大于b,就返回一个大于0的值。
注意,数组中undefined的元素都排列在数组末尾。即使你提供了自定义的排序函数也是这样,因为undefined值不会被传递给你提供的orderfunc。
(1)对英文字符进行排序:
var a;
var arr_5 = ['height','width','float','color','margin','undefined',undefined,a];
console.log(arr_5.sort()); // ["color", "float", "height", "margin", "undefined", "width", undefined, undefined]
(2)未使用比较函数对数值进行排序:
var arr_6 = [34,9,0,15,121,56];
console.log(arr_6.sort()); //[0,121,15,34,56,9]
(3)使用比较函数对数值进行排序:
方法一:匿名函数
升序
var arr_6 = [34,9,0,15,121,56];
arr_6.sort(function (value1,value2) {
if (value1 < value2) {
return -1; //此处不一定是-1,只要是负数即可
} else if (value1 > value2) {
return 1; //此处不一定是1,只要是正数即可
} else {
return 0;
}
});
console.log(arr_6); //[0, 9, 15, 34, 56, 121]
可以改成:
var arr_6 = [34,9,0,15,121,56];
arr_6.sort(function (value1,value2) {
return value1 - value2;
});
console.log(arr_6); //[0, 9, 15, 34, 56, 121]
降序:只要交换比较函数的返回值即可
var arr_6 = [34,9,0,15,121,56];
arr_6.sort(function (value1,value2) {
if (value1 < value2) {
return 1; //此处不一定是1,只要是正数即可
} else if (value1 > value2) {
return -1; //此处不一定是-1,只要是负数即可
} else {
return 0;
}
});
console.log(arr_6); //[121, 56, 34, 15, 9, 0]
可以改成:
var arr_6 = [34,9,0,15,121,56];
arr_6.sort(function (value1,value2) {
return value2 - value1;
});
console.log(arr_6); //[121, 56, 34, 15, 9, 0]
方法二:调用函数
升序
function compare(value1,value2) {
if (value1 < value2) {
return -1; //此处不一定是-1,只要是负数即可
} else if (value1 > value2) {
return 1; //此处不一定是1,只要是正数即可
} else {
return 0;
}
}
var arr_6 = [34,9,0,15,121,56];
arr_6.sort(compare);
console.log(arr_6); //[0, 9, 15, 34, 56, 121]
可以改成:
function compare(value1,value2) {
return value1 - value2;
}
var arr_6 = [34,9,0,15,121,56];
arr_6.sort(compare);
console.log(arr_6); //[0, 9, 15, 34, 56, 121]
降序:只要交换比较函数的返回值即可
function compare(value1,value2) {
if (value1 < value2) {
return 1; //此处不一定是1,只要是正数即可
} else if (value1 > value2) {
return -1; //此处不一定是-1,只要是负数即可
} else {
return 0;
}
}
var arr_6 = [34,9,0,15,121,56];
arr_6.sort(compare);
console.log(arr_6); //[121, 56, 34, 15, 9, 0]
可以改成:
function compare(value1,value2) {
return value2 - value1;
}
var arr_6 = [34,9,0,15,121,56];
arr_6.sort(compare);
console.log(arr_6); //[121, 56, 34, 15, 9, 0]