第九章 9.2 数组的方法(Array Methods)
注:这里只讲解一些 Array() 的最重要的方法。其他更多的参考手册。
9.2.1 join()
将所有元素转换为字符串并默认用 "," 连接。可以指定一个附加的参数来自定义分隔符:
var a = [1, 2, 3];
var s = a.join(); // s == "1,2,3"
s = a.join(", "); // s == "1, 2, 3"
var s = a.join(); // s == "1,2,3"
s = a.join(", "); // s == "1, 2, 3"
该方法是 String.split() 方法的逆操作。
9.2.2 reverse()
该方法把已有的数组翻转,返回一个相反次序排列的数组。注意该数组是就地操作的,而不是创建新的数组。
var a = new Array(1,2,3);
a.reverse();
var s = a.join(); // s == "3,2,1"
a.reverse();
var s = a.join(); // s == "3,2,1"
9.2.3 sort()
如果不传递任何参数,则按字母顺序排序。(如果必要,会自动把非字符串的数据临时转变为字符串以供比较)。
var a = new Array("banana", "cherry", "apple");
a.sort();
var s = a.join(", "); // a == "apple, banana, cherry"
a.sort();
var s = a.join(", "); // a == "apple, banana, cherry"
undefined 元素将被排列到最后。
可以传递一个自定义的比较函数来决定自定义的排序。该函数必须返回负数,0,正数来决定参数中的前者还是后者次序比较大,或者是相等的。例如:
var a = [33, 4, 1111, 222];
a.sort(); // 按字母顺序:1111, 222, 33, 4
a.sort(function(a,b) { // 按数字大小:4, 33, 222, 1111
return a-b;
});
a.sort(); // 按字母顺序:1111, 222, 33, 4
a.sort(function(a,b) { // 按数字大小:4, 33, 222, 1111
return a-b;
});
9.2.4 concat()
连接数组元素。例子:
var a = [1,2,3];
a.concat(4, 5); // 返回 [1,2,3,4,5]
a.concat([4,5]); // 返回 [1,2,3,4,5]
a.concat([4,5],[6,7]); // 返回 [1,2,3,4,5,6,7]
a.concat(4, [5,[6,7]]); // 返回 [1,2,3,4,[6,7]]
a.concat(4, 5); // 返回 [1,2,3,4,5]
a.concat([4,5]); // 返回 [1,2,3,4,5]
a.concat([4,5],[6,7]); // 返回 [1,2,3,4,5,6,7]
a.concat(4, [5,[6,7]]); // 返回 [1,2,3,4,[6,7]]
9.2.5 slice()
返回数组的片断。(或者说子数组)。有两个参数,分别指定开始和结束的索引(不包括第二个参数索引本身)。如果只有一个参数,则返回从这个索引到最后的;如果任意一个参数为负的,则表示是从尾部向前的索引计数。比如 -1 表示最后一个,-3 表示倒数第三个。例子:
var a = [1,2,3,4,5];
a.slice(0, 3); // [1,2,3];
a.slice(3); // [4,5]
a.slice(1,-1); // [2,3,4];
a.slice(-3,-2); // [3]
a.slice(0, 3); // [1,2,3];
a.slice(3); // [4,5]
a.slice(1,-1); // [2,3,4];
a.slice(-3,-2); // [3]
9.2.6 splice()
接合。
用于插入或删除数组中的某些元素。该操作是就地修改的,不返回新数组。
第一个参数指定删除或插入将发生的位置。第二个参数指定将要删除的元素数目,如果省略该参数,则从第一个参数的位置到最后都会被删除。splice() 会返回被删除元素的数组。如果没有元素被删,则返回空数组。
var a = [1,2,3,4,5,6,7,8];
a.splice(4); // Returns [5,6,7,8]; a is [1,2,3,4]
a.splice(1,2); // Returns [2,3]; a is [1,4]
a.splice(1,1); // Returns [4]; a is [1]
a.splice(4); // Returns [5,6,7,8]; a is [1,2,3,4]
a.splice(1,2); // Returns [2,3]; a is [1,4]
a.splice(1,1); // Returns [4]; a is [1]
后面可以跟任意多的参数用于插入。例子:
var a = [1,2,3,4,5];
a.splice(2,0,'a','b'); // Returns []; a is [1,2,'a','b',3,4,5]
a.splice(2,2,[1,2],3); // Returns ['a','b']; a is [1,2,[1,2],3,3,4,5]
a.splice(2,0,'a','b'); // Returns []; a is [1,2,'a','b',3,4,5]
a.splice(2,2,[1,2],3); // Returns ['a','b']; a is [1,2,[1,2],3,3,4,5]
注意和 concat() 不同的是,splice() 不能自动拆分并连接数组参数。
9.2.7 push() 和 pop()
这两个方法允许我们像操作堆栈 (stack) 一样操作数组。push() 在尾部附加一个或多个元素,并返回新的 length;pop() 操作在尾部删除一个元素,并返回该元素。
var stack = []; // stack: []
stack.push(1,2); // stack: [1,2] Returns 2
stack.pop( ); // stack: [1] Returns 2
stack.push(3); // stack: [1,3] Returns 2
stack.pop( ); // stack: [1] Returns 3
stack.push([4,5]); // stack: [1,[4,5]] Returns 2
stack.pop( ) // stack: [1] Returns [4,5]
stack.pop( ); // stack: [] Returns 1
stack.push(1,2); // stack: [1,2] Returns 2
stack.pop( ); // stack: [1] Returns 2
stack.push(3); // stack: [1,3] Returns 2
stack.pop( ); // stack: [1] Returns 3
stack.push([4,5]); // stack: [1,[4,5]] Returns 2
stack.pop( ) // stack: [1] Returns [4,5]
stack.pop( ); // stack: [] Returns 1
9.2.8 unshift() 和 shift()
这两个函数和 push() , pop() 类似,只不过他们添加或删除元素发生在数组的开始而不是最后位置。例子:
var a = []; // a:[]
a.unshift(1); // a:[1] Returns: 1
a.unshift(22); // a:[22,1] Returns: 2
a.shift( ); // a:[1] Returns: 22
a.unshift(3,[4,5]); // a:[3,[4,5],1] Returns: 3
a.shift( ); // a:[[4,5],1] Returns: 3
a.shift( ); // a:[1] Returns: [4,5]
a.shift( ); // a:[] Returns: 1
a.unshift(1); // a:[1] Returns: 1
a.unshift(22); // a:[22,1] Returns: 2
a.shift( ); // a:[1] Returns: 22
a.unshift(3,[4,5]); // a:[3,[4,5],1] Returns: 3
a.shift( ); // a:[[4,5],1] Returns: 3
a.shift( ); // a:[1] Returns: [4,5]
a.shift( ); // a:[] Returns: 1
9.29 toString() 和 toLocaleString()
数组的 toString() 方法调用其中每一个元素的 toString() 然后用逗号连接他们得到结果。返回的字符串里不包含任何方括号或其他分隔符:
[1,2,3].toString( ) // Yields '1,2,3'
["a", "b", "c"].toString( ) // Yields 'a,b,c'
[1, [2,'c']].toString( ) // Yields '1,2,c'
["a", "b", "c"].toString( ) // Yields 'a,b,c'
[1, [2,'c']].toString( ) // Yields '1,2,c'
toLocaleString() 是 toString() 的本地化版本。对其中每个数组元素会调用 toLocaleString() 来转换,而且分隔符也会采用本地化的设置值。