使用数组对象
检索数组
检索数组一般使用 for/in 循环实现,也可使用 for 循环,配合数组的 length 属性和下标来实现。
操作数组
使用数组的属性 length 也可以实现数组的增删,但是比较低效。
使用 delete 可以删除数组元素的值,但不改变数组的长度。
toString() | 将数组转换成一个字符串 |
toLocalString() | 将数组转换成局部字符串 |
join( ) | 将数组元素连接起来以构成字符串,有可选参数,为分隔符 |
split() | 将字符串按照一定规则变化为数组 |
push() 和 pop()
let a = []; // 定义数组
a.push(1);
// 进栈,栈值为 [1] ,此时该方法返回 1
a.pop(); // 出栈,栈值为空,此时该方法返回 1
a.push(2); // 进栈,栈值为 [2] ,此时该方法返回 1
a.pop(); // 出栈,栈值为空,此时该方法返回 2 \
a.push(3, 4); // 进栈,栈值为 [3,4],此时该方法返回 2
a.pop();
// 出栈,栈值为 [3],此时该方法返回 4
a.pop(); // 出栈,栈值为空,此时该方法返回 3
方法 push() 是按照参数的顺序依次添加数组到尾部,所以它在原数组进行操作。方法 pop(),用于删除数组的最后一个元素,如果数组为空,则 pop() 不改变数组的长度,返回 undefined 。
shift() 和 unshift()
方法 unshift() 是按照参数的顺序依次添加数组到头部,所以它在原数组进行操作。方法 shift(),用于删除数组的头部元素,如果数组为空,则 shift() 不改变数组的长度,返回 undefined 。
concat()
concat() 是比较特殊的数组元素添加方法。它采用粘连的方式把参数添加到数组中,而不是模拟堆栈的方式。
concat() 返回一个新的数组,而不是原数组。
如果参数是数组,则 concat() 把其打散分别作为单独的元素连接到数组的尾部。但,不会打散数组中包含的数组。
操作子数组
通过模拟堆栈数据结构的操作方式来实现对数组的操作,它有着严格的次序约定。对于这种严谨的一维线性作业方式,常称之为线性表。
splice()
splice() 在原数组上进行插入、删除、替换数组元素操作。
-
第一个参数为操作的下标位置
-
第二个参数为删除个数
-
第三个之后参数为要插入的元素
-
参数可选,若只有一个参数,则删除指定元素后(包括该元素)所有元素
-
splice ()的删除和插入是同时进行的
-
splice ()返回值为删除的子数组
-
当第一个参数大于 length ,删除无效,直接添加新的元素
-
如果第一个参数是负值,则按绝对值从数组右侧向左开始定位
slice()
slice() 和 splice() 方法功能相似,但它进能够截取数组中指定的区域的元素,并返回这个子元素。
- 第一个参数为起始下标
- 第二个参数为结束位置
- 参数为负时,则为倒序定位
- 起始值大于 length 时,不执行任何操作,返回空数组
- slice ()返回数组一部分,而不改变原数组
如果不想改动原数组,使用 slice() 是个不错的选择。若是其它要求, splice() 也不错呦。
数组排序
reverse()
reserve() 能够颠倒数组元素的顺序,该方法不需要参数。该方法是在原数组的基础上进行操作,不产生新数组。
sort() 对数组进行排序
- 若无参数,则字母排序
- 若元素不是字符串,则先转换为字符串
- 在排序时, sort() 方法将根据元素值进行逐位分析,而不是根据字符串的个数进行比较
- 任何情况,数组中的 undefined 的元素都会排到最后
- sort ()也是在原数组操作,不产生新的数组
function f(a, b) {
return a - b;
}
var a = [3, 1, 2, 4, 5, 7, 8, 0, 9];
a.sort(f);
alert(a);
//返回数组 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
sort ()方法不仅仅可以按字母进行排序,还可以及进行其它的操作。这时,就必须提供一个函数参数,该函数参数比较两个值的相对顺序。排序函数应有两个参数,返回值如下。
-
如果根据自身判断, a 小于 b ,则排序后 a 应该在 b 的前,返回一个小于 0 的值
-
如果 a 等于 b ,则返回 0
-
如果 a 大于 b ,则返回 一个大于 0 的数
使用排序函数
sort()方法可以对数组进行排序,在执行过程中并不会创建新的 Array 对象。其语法格式如下:
oArray.sort();
oArray.sort(sortFunction);
参数 sortFunction 是可选的,是用来确定数组中各元素顺序的函数的名称。如果该参数被省略,那么元素将按照 ASCII 字符顺序进行升序排列,这意味着不能对中文进行排序。
默认情况下的排序规则
默认情况下,数组将按下面的方法进行排序:
- 排序区分大小写,大写优先于小写(例如 Z 优先于 a )
- 按升序排序(例如 a 优先于 b )
- 数组被修改以反映排序,排序后的数组中如果存在相同索引字段的元素,那么这些元素将连续地排在一起(索引号连续),但它们之间没有什么特定的顺序
- 数值字段按字符串方式进行排序,因此100优先于99,因为1的字符串值比9的低
自定义排序
如果定义参数 sortFunction 指定了一个函数,那么该函数必须返回下列值之一:
- -1,表示所传递的第一个参数比第二个参数小
- 0,表示两个参数相等
- 1,表示第一个参数比第二个参数大
排序的范例。
例如下面的代码分别演示了怎样进行数组排序:
var oArray = new Array('Tom', 'Tommy', 'John'); // 按照 ASCII 字符顺序进行升序排列
oArray.sort(); // ['John', 'Tom', 'Tommy'];
console.log(oArray);
var sortFn = function (a, b) {
if (a.length < b.length) return -1;
if (a.length > b.length) return 1;
if (a.length == b.length) return 0;
}; // 按照自定义函数进行排序,自定义函数是根据元素字符串长度进行对比的
oArray.sort(sortFn); // ["Tom","John","Tommy"]
console.log(oArray);
下面的代码演示了如何对二维数组进行自定义排序:
var ads = new Array(
['pic/image1.jpg', 20],
['pic/image4.jpg', 10],
['pic/image2.jpg', 20],
['pic/image3.jpg', 40],
); //根据二位数组中的数值来重新排列数组元素,数值越大,越位于后面
var sortFn = function (a, b) {
if (a[1] < b[1]) return -1;
if (a[1] > b[1]) return 1;
if (a[1] == b[1]) return 0;
};
ads.sort(sortFn);
console.log(ads);
实现中文按 Unicode 代码点排序
例如下面的代码演示了怎样对由中文元素组成的数组进行排序:
var oArray = new Array('华康圆体', '黑体', '华康黑体', '宋体');
var sortFn = function (u, v) {
var a = String(u);
var b = String(v);
if (a.charCodeAt(0) < b.charCodeAt(0)) return -1;
if (a.charCodeAt(0) > b.charCodeAt(0)) return 1;
if (a.charCodeAt(0) == b.charCodeAt(0)) return 0;
};
// 按照自定义函数进行排序
// 自定义函数是根据元素第一个字符的 Unicode 代码点进行对比的
oArray.sort(sortFn); // ["$1康圆体","华康黑体","宋体","黑体"]
console.log(oArray);
数组与字符串的转换
push() | 给数组添加元素 | 返回值为 length |
pop() | 删除并返回数组最后一个元素 | 返回值为删除的元素 |
unshift() | 在头部添加一个元素 | 返回值为 length |
shift() | 将元素移除数组 | 返回值为删除的元素 |
concat() | 连接数组 | 返回新的数组 |
toString()
toString() 方法是 Object() 对象定义的,因此在 JavaScript 中所有对象都继承了这个方法,数组对象不例外。在数组中 toString() 方法能够将每个元素转换为字符串,然后以逗号连续输出显示。
var a = [1, 2, 3, 4, 5];
var s = a.toString();
alert(s); // 返回字符串 "1,2,3,4,5"
toLocalString()
toLocalString() 方法与 toString() 方法用法基本相同,主要区别在于 toLocalString() 方法能够使用用户所在地特定的分隔符把生成的字符串连接起来,形成一个字符串。
var a = [1, 2, 3, 4, 5];
var s = a.toLocalString();
alert(s);
// 返回字符串 "1.00, 2.00, 3.00, 4.00, 5.00"
join()
var a = [1, 2, 3, 5, 5, 4];
var s = a.join('==');
alert(s); // "1==2==3==5==5==4"