检索数组一般使用 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() 在原数组上进行插入、删除、替换数组元素操作。
第三个之后参数为要插入的元素
slice()
slice() 和 splice() 方法功能相似,但它进能够截取数组中指定的区域的元素,并返回这个子元素。
如果不想改动原数组,使用 slice() 是个不错的选择。若是其它要求, splice() 也不错呦。
reverse()
reserve() 能够颠倒数组元素的顺序,该方法不需要参数。该方法是在原数组的基础上进行操作,不产生新数组。
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 ,则返回 一个大于 0 的数
使用排序函数
sort()方法可以对数组进行排序,在执行过程中并不会创建新的 Array 对象。其语法格式如下:
oArray.sort();
oArray.sort(sortFunction);
参数 sortFunction 是可选的,是用来确定数组中各元素顺序的函数的名称。如果该参数被省略,那么元素将按照 ASCII 字符顺序进行升序排列,这意味着不能对中文进行排序。
默认情况下的排序规则
默认情况下,数组将按下面的方法进行排序:
自定义排序
如果定义参数 sortFunction 指定了一个函数,那么该函数必须返回下列值之一:
排序的范例。
例如下面的代码分别演示了怎样进行数组排序:
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() 方法是 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"