《JavaScript教程》08章 数组


JavaScript中没有多维数组,只有一维数组。因为数组成员的类型是任意,所以,可以对每一个数组成员再赋给它一个数组的方式来解决。数组的基数从0开始。

新建数组
array = new Array()            //定义一个数组。其元素个数为0
array = new Array(n)           //定义一个数组。其元素个数为n
array = new Array(e1, e2, ...) //定义一个数组,对其每个元素赋上初值
                               //注:JavaScript中数组元素的个数可以任意增加
xx = new Array();       //xx的长度是0
xx[0] = "January";      //xx的长度变为1
xx[1] = "February";     //xx的长度变为2
xx[11] = "December";    //xx的长度变为12
也可以在新建数组时直接赋值
yy = new Array("January", "February", null, null, null, null, null, null, null, null, null, "December");
//结果与上例相同
//数组的序号也可以用字符串代替, 但排序可能有问题
xx = new Array();
xx["Jan"] = "January";
xx["Feb"] = "February";
xx["Dec"] = "December";
数组的元素再定义成数组, 便可以产生多维数组树形数组
xx = new Array(3);                         //结果:
for (i = 0; i < xx.length; i++) {          //xx[0][0]=0    xx[1][0]=10    xx[2][0]=20
    xx[i] = new Array(4);                  //xx[0][1]=1    xx[1][1]=11    xx[2][1]=21
    for (j = 0; j < xx[i].length; j++) {   //xx[0][2]=2    xx[1][2]=12    xx[2][2]=22
        xx[i][j] = i * 10 + j;             //xx[0][3]=3    xx[1][3]=13    xx[2][3]=23
    }                                      //
}                                          //
--------------------------------------------------------------------------------------
//以下是九九乘法表的例子
xx = new Array(9);
for (i = 0; i < xx.length; i++) {
    xx[i] = new Array(i+1);
    for (j = 0; j < i+1; j++) {
        xx[i][j] = (i+1) * (j+1);
    }
} 

数组长度的取得
array.length
yy = new Array("Sun", "Mon", "Thu");
len = yy.length;          //len的值为: 3

数组的连结
array.concat(array2, ...)   //两个数组的连接
xx = new Array("Sun", "Mon", "Tue", "Wed");
yy = new Array("Thu", "Fri", "Sat");
zz = xx.concat(yy);   //zz的值: "Sun", ...., "Sat"
array.join([separator])    //用分隔符将数组个元素连接起来
xx = new Array("2004", "12", "07");
yy = xx.join("/");         // yy的值: "2004/12/07"

数组的排序
array.sort();      //按升序排序
array.reverse();   //按降序排序
xx = new Array(9,1,7,3);
xx.sort();       //xx的结果是: 1,3,7,9
xx.reverse();    //xx的结果是: 9,7,3,1
array.sort([func]);    //这是一个让人笑掉大牙的排序
function sortMethod(a, b) {     //先定义一个函数,函数名任意起名
    return a - b;               //参数必须2个,参数名任意起名
}                               //数组内部比较时根据return值来决定
//其它资料说:“正数:升序  0:不排序  负数:降序”      --错误的说法
//“参数1-参数2:升序  0:不排序  参数2-参数1:降序” --正确的说法
xx = new Array(9,1,7,3);
xx.sort(sortMethod);         //xx的结果是:  1,3,7,9
//将上面改成: return b-a;    //xx的结果是:  9,7,3,1
//将上面改成: return b-b;    //xx的结果是:  9,1,7,3

取数组的子集
array.slice(start [, end])  //start到end的子集,end没有则到最后
xx = new Array("A", "B", "C", "D""E", "F", "G");
xx.slice(3);      //xx的结果: "D", "E", "F", "G"
xx.slice(1,3);    //xx的结果: "B", "C", "D"

序列化
array.toString()   //所有的类几乎都有toString方法。
xx = new Array("A", "B", "C", "D", "E", "F", "G");
xx.toString();      //xx的结果: "A, B, C, D, E, F, G"