1. 创建数组
数组直接量中的值不一定要是常量,可以是任意表达式;
var base = 1024;
var table = [base, base+1,base+2];
它可以包含对象直接量或其他数组直接量
var b = [[1,{x:1,y:2}],[2,{x:3,y:4}]];
如果省略数组中直接量的某个值,为undefined
var undefs = [,,];//数组有2个元素,数组直接量允许有可选的结尾逗号
2. 数组元素的读和写
注意,可以使用负数或非整数来索引数组。数值转换为字符串,字符串作为属性名来用。
如果使用了是非负整数的字符串,它就当做数组索引,而非对象属性。
a[-1.23] = true;//创建一个名为“-1.23”的属性 a["1000"] = 0;//数组的第1001个元素 a[1.000] //和a[1]相等
3. 数组的长度
每个数组有一个length属性
特殊行为:设置length属性为一个小于当前长度的非负整数n时,当前数组中的那些索引值大于或等于n的元素将被删除:
a = [1,2,3,4,5]; a.length = 3;//现在为a[1,2,3] a.length = 0;//删除所有元素,为a[] a.length = 5;//没有元素,长度为5,像new Array(5)
4. 数组元素的添加和删除
1)直接赋值
2)使用push()方法,在末尾添加一个或多个元素
a = []; a.push("one");//现在为a["one"]
3)delete删除数组元素:
a = [1,2,3,4,5]; delete a[1];//a在索引1的位置不再有元素
数组有pop()方法,一次是减少长度1并返回被删除元素的值;
shift()方法,从数组头部删除一个元素。
splice()是一个通用的方法来插入、删除或替换数组元素。
5. 数组方法
1) join()方法
将数组中所有元素都转化为字符串并连接在一起
var a = [1,2,3]; a.join();//"1,2,3" a.join(" ");//"1 2 3" a.join("");//"123" var b = new Arrray(10);// b.join('-');//'---------'
2) reverse()方法
将数组中的元素颠倒顺序,返回逆序的数组。
var a = [1,2,3]; a.reverse().join();//"3,2,1",并且现在的a是[3,2,1]
3) sort()方法
数组中的元素排序并返回排序后的数组。
var a = new Array("banana","apple","cherry"); a.sort(); var s = a.join(",");//s="apple","banana","cherry"
对一个数组执行不区分大小写的字幕排序
var a = new Array("ant","Bug","cat","Dog"); a.sort();//"Bug","Dog","ant","cat" a.sort(function(s,t){ var a = s.toLowerCase(); var b = t.toLowerCase(); if (a < b) return -1; if(a > b) return 1; return 0; });//=>"ant","Bug","cat","Dog"
4) forEach() 方法
遍历数组,为每个元素调用指定的函数
var data = [1,2,3,4,5]; var sum = 0; data.forEach(function(value){ sum += value }); data.forEach(function(v,i,a){ a[i] = v + 1; });
forEach()无法在所有元素都传递给调用个函数之前终止遍历。不能使用break语句。
5) map()方法
调用的数组的每个元素传递给指定的函数,返回一个数组,包含函数返回值。
var data = [1,2,3,4,5]; var b = data.map(function(x){ return x*x; }); alert(b);
6) filter()方法
返回的数组元素是调用的数组的一个子集。传递的函数是用来逻辑判定的:true or false.
var data = [1,2,3,4,5]; var small = data.filter(function(x){ return x<3; });//2,1 var other = data.filter(function(x){ return x%2!=0; });//5,3,1 alert(small); alert(other);
7)every() 和some()方法
返回true或false。
every() 针对所有,some()象数学中的“存在”.
var data = [1,2,3,4,5]; alert(data.every(function(x){return x<10;}));//true alert(data.some(function(x){return x%2==0;}));//true
8)reduce() 和reduceRight()方法
使用指定的函数将数组元素进行组合,生成单个值。
var data = [1,2,3,4,5]; var sum = data.reduce(function(x,y){return x+y;},0);//数组求和,第二个函数是一个传递给函数的初始值 var product = data.reduce(function(x,y){return x*y;},1);//数组求积 var max = data.reduce(function(x,y){return (x>y)?x:y;});//数组最大值 alert(sum+","+product+","+max);//true
reduceRight() 按照数组索引从高到低(从右到左);
9)indexOf() 和 lastIndexOf()方法
搜索整个数组中具有给定值的元素,返回找到的第一个元素的索引或如果没找到返回-1
indexOf()从头至尾,lastIndexOf()反向搜索。
var data = [1,2,3,1,5]; var s = data.indexOf(1);//0 var p = data.lastIndexOf(1);//3 var m = data.indexOf(6);//-1 alert(s+","+p+","+m);
可以使用charAt(i)访问单个字符。