JavaScript 数组

 

  • Array
    数组是包含子项并由索引迭代子项的一种对象,索引从零开始。
// 使用构造函数创建数组
var foo = new Array;
// 使用数组语法创建数组
var bar = [];
    需要注意的是,如果传入的是数字类型的值时,以上2种创建数组的方式是有所不同的。
// 数组语法情况下
var foo = [ 100 ];
alert( foo[ 0 ] ); // 100
alert( foo.length ); // 1
// 构造函数情况下
var bar = new Array( 100 );
alert( bar[ 0 ] ); // undefined
alert( bar.length ); // 100
    数组的常用方法
// 在数组上使用 push(), pop(), unshift() 和 shift() 方法
var foo = [];
 
foo.push( "a" );
foo.push( "b" );
 
alert( foo[ 0 ] ); // a
alert( foo[ 1 ] ); // b
 
alert( foo.length ); // 2
 
foo.pop();
 
alert( foo[ 0 ] ); // a
alert( foo[ 1 ] ); // undefined
 
alert( foo.length ); // 1
 
foo.unshift( "z" );
 
alert( foo[ 0 ] ); // z
alert( foo[ 1 ] ); // a
 
alert( foo.length ); // 2
 
foo.shift();
 
alert( foo[ 0 ] ); // a
alert( foo[ 1 ] ); // undefined
 
alert( foo.length ); // 1

 

  • 数组的方法和属性
    • .length
    .length属性可以确定数组中元素的数量。
var myArray = [ "hello", "world", "!" ];
console.log( myArray.length ); // 3
    你可以使用.length属性对数组进行遍历。
var myArray = [ "hello", "world", "!" ];
for ( var i = 0; i < myArray.length; i = i + 1 ) {
console.log( myArray[ i ] );
}
    • .concat()
    .concat()方法用于串联两个或更多的数组。
var myArray = [ 2, 3, 4 ];
var myOtherArray = [ 5, 6, 7 ];
var wholeArray = myArray.concat( myOtherArray ); // [ 2, 3, 4, 5, 6, 7 ]
    • .join()
    .join()方法用于创建一个由数组内元素组成的字符串,可以指定每个元素之间的分隔符,如果没有指定那么默认为逗号。
// 连接元素
var myArray = [ "hello", "world", "!" ];
// 默认逗号为分隔符
console.log( myArray.join() ); // "hello,world,!"
// 也可以指定分隔符
console.log( myArray.join( " " ) ); // "hello world !";
console.log( myArray.join( "!!" ) ); // "hello!!world!!!";
// 指定为无分隔符
console.log( myArray.join( "" ) ); // "helloworld!"
    • .push()
    .push()方法将元素添加到数组的末尾并扩展这个数组,你可以使用索引来设置数组元素的值,但是索引有可能是不确定的,那么使用该方法添加元素到数组中是比较安全的做法。
var myArray = [];
myArray[ 0 ] = "hello";
myArray[ 1 ] = "world";
myArray[ 3 ] = "!";
console.log( myArray ); // [ "hello", "world", undefined, "!" ];
var foo = [];
foo.push( "a" );
foo.push( "b" );
 
    • .pop()
    .pop()方法用于移除数组中的最后一个元素,与.push()方法的功能相反。
var myArray = [];
myArray.push( 0 ); // [ 0 ]
myArray.push( 2 ); // [ 0 , 2 ]
myArray.push( 7 ); // [ 0 , 2 , 7 ]
myArray.pop(); // [ 0 , 2 ]
    • .reverse()
    .reverse()方法输出反序的数组序列。
var myArray = [ "world" , "hello" ];
myArray.reverse(); // [ "hello", "world" ]
    • .shift()
    .shift()方法用于删除数组的第一个元素,与.push()方法配合使用,可以将数组当做队列使用。
// 队列
var myArray = [];
myArray.push( 0 ); // [ 0 ]
myArray.push( 2 ); // [ 0 , 2 ]
myArray.push( 7 ); // [ 0 , 2 , 7 ]
myArray.shift(); // [ 2 , 7 ]
    • .slice()
    .slice()方法用于提取数组的一部分生成一个新的数组,这个方法需要一个参数,这个参数是数组提取的开始序号。
var myArray = [ 1, 2, 3, 4, 5, 6, 7, 8 ];
var newArray = myArray.slice( 3 );
console.log( myArray ); // [ 1, 2, 3, 4, 5, 6, 7, 8 ]
console.log( newArray ); // [ 4, 5, 6, 7, 8 ]
    • .splice()
    .splice()方法用于移除一部分元素并新增一部分元素,该方法至少需要3个参数。
myArray.splice( index, length, values, ... );
    index:开始序号
    length:被移除元素的数量
    values:插入到指定序号位置的值
var myArray = [ 0, 7, 8, 5 ];
myArray.splice( 1, 2, 1, 2, 3, 4 );
console.log( myArray ); // [ 0, 1, 2, 3, 4, 5 ]
    • .sort()
    .sort()方法用于数组排序,它需要一个参数,这个参数是一个比较方法,如果没有这样的方法,那么默认按正序排列。
// 默认情况的排序
var myArray = [ 3, 4, 6, 1 ];
myArray.sort(); // 1, 3, 4, 6
// 设置比较方法的排序
function descending( a, b ) {
return b - a;
}
var myArray = [ 3, 4, 6, 1 ];
myArray.sort( descending ); // [ 6, 4, 3, 1 ]
    descending方法的返回值是非常重要的。如果返回值是小于零的,那么a的序号是在b的前面,如果返回值是大于0的,则反之,如果返回值是等于0 的,那么两个元素的索引是相同的。
    • .unshift()
    .unshift()方法用于在数组的第一个位置插入元素。
var myArray = [];
myArray.unshift( 0 ); // [ 0 ]
myArray.unshift( 2 ); // [ 2 , 0 ]
myArray.unshift( 7 ); // [ 7 , 2 , 0 ]
    • .forEach()
    .forEach()方法用于遍历数组。这个方法有三个参数,分别是Element(元素)、Index(元素在数组中的序号)和Array(数组) 。
function printElement( elem ) {
console.log( elem );
}
function printElementAndIndex( elem, index ) {
console.log( "Index " + index + ": " + elem );
}
function negateElement( elem, index, array ) {
array[ index ] = -elem;
}
myArray = [ 1, 2, 3, 4, 5 ];
myArray.forEach( printElement );
myArray.forEach( printElementAndIndex );
myArray.forEach( negateElement );
posted @ 2013-08-12 09:06  M守护神  阅读(730)  评论(1编辑  收藏  举报