创建数组
// 用数组直接量创建数组
var arr1 = [1,2,3,4,5];
// 创建长度为10的数组
var arr2 = new Array(10);
// 使用构造函数创建数组,并且初始化
var arr3 = new Array(1,2,3,4,5);
数组元素的读和写
使用索引访问数组元素
通过索引访问数组,索引的范围是0-2的32次方-2。
var a = ["hello"];
var value = a[0];
a[1] = 1;
数组长度
每个数组都有一个length属性。
var arr = [0,1,2,3,4,5,6,7,8,9];
varlength = arr.length; //数组的长度为10
length属性不仅可读还可写,将数组长度重新复制为小于当前length的时候,会将数组内索引大于等于新length值得元素从数组中删除。
arr.length = 5; // [0,1,2,3,4]
数组元素的添加和删除
出了直接使用索引来将数据添加到数组外还可以使用数组的push()方法,push()方法将数据添加到数组末尾。
var arr = [];
arr.push("zero"); // ["zero"]
arr.push("one", "two"); // ["zero","one"."two"]
pop()方法,在将数组末尾的元素从数组移除并返回。
var arr = ["a","b","c"];
var value = arr.pop(); // value为"c",数组内容["a","b"]
value = arr.pop(); // value为"b",数组内容["a"]
数组遍历
普通for循环遍历
var arr = [0,1,2,3,4];
for (var i = 0, length = arr.length; i < length; i++){
var value = arr[i];
}
for/in循环遍历
var arr = [0,1,2,3,4];
for (var index in arr){
var value = arr[i];
}
数组方法
join()
将数组中所有元素根据分隔符连接起来,返回字符串形式
var a = [0,1,2];
a.join(); // "0,1,2"
a.join(" "); // "0 1 2"
reverse()
将数组元素反转
var a = [0,1,2];
a.reverse().join(); // "2,1,0"
sort()
将数组元素排序,默认根据字母顺序表排序
var arr1 = ["hello", "apple", "banana"];
arr.sort(); // ["apple","banana","hello"]
var arr2 = [111,4,22,12345,222];
arr2.sort(function(a,b){
return a - b;
}); // [4,22,111,222,12345]
concat()
创建并返回一个新数组,它的元素包括原始数组的元素和concat()的每个参数
var arr = [1,2,3];
arr.concat([4,5]); // [1,2,3,4,5]
slice()
将数组返回数组的一个子数组。
var arr = [0,1,2,3,4,5,6,7,8,9];
arr.slice(2, 7); // [2,3,4,5,6]
arr.slice(3.-1); // [3,4,5,6,7,8]
splice()
该方法是插入数组元素和删除数组元素的通用方法。
var arr = [0,1,2,3,4,5,6,7,8,9];
arr.splice(4); // 返回[4,5,6,7,8,9],arr的元素[0,1,2,3]
arr.splice(1,2); // 返回[1,2],arr的元素[0,3]
arr.splice(1,1); // 返回[3],arr的元素[0]
var arr2 = [0,1,2,3,4];
arr2.splice(1,2,"a","b"); // 返回[1,2],arr的元素[0,"a","b",3,4]
arr2.splice(3,0,"c"); // 返回[],arr的元素[0,"a","b","c",3,4]
push()和pop()
这两个方法开始说过了
unshift()和shift()
unshift()方法可以将元素插入到数组开头返回数组长度,shift()方法将数组元素从开始移返回,并将索引后面数据的索引往前移位。
var arr = [];
arr.unshift(1,2); // 数组元素为[1,2]
arr.unshift(3); // 数组元素为[3,1,2]
arr.shift(); // 返回3,数组元素为[1.2]
toString()和toLocaleString()
ECMAScript 5中的数组方法
forEach()
forEach()方法从头到尾遍历数组,为每个元素调用指定的函数。
var arr = [1,2,3,4,5];
var sum = 0;
// 执行完后sum的结果为15
arr.forEach(function(value){
sum += value;
});
map()
将调用的数组的每个元素传递给指定的函数,并返回一个数组。
var arr = [1,2,3,4,5];
arr.map(function(value){
return value * value;
});
arr.join(); // "1,4,9,16,25"
filter()
返回的数组是调用数组的子集,只有调用的函数的返回值为true时才存入返回的数组
var arr = [1,2,3,4,5,6,7,8,9,10];
// 返回数组中偶数子集
arr.filter(funciton(value){
return arr % 2 == 0;
});
every()和some()
这两个方法是数组的逻辑判断方法。every()方法,判断方法所有的返回值都为true时返回true。some()方法,判断方法任何一个返回值为true时返回true。
var arr = [0,1,2,3,4,5,6,7,8,9];
arr.every(function(value){
return value < 10;
}); //true
arr.every(function(value){
return value % 2 == 0;
}); //false
arr.some(function(value){
return value > 10;
}); //false
arr.some(function(value){
return value % 2 == 0;
}); //true
注:every()方法只要有一个判断方法返回值为false,就会结束遍历返回false。some()方法只要有一个判断方法返回值为true,就会结束遍历返回true
reduce()和reduceRight()
使用指定的函数将数组元素合并。
var arr = [1,2,3,4,5];
// 0是初始值,然后 (((((0+1)+2)+3)+4)+5)
arr.reduce(function(a,b){
return a + b;
},0);
var arr2 = [2,3,4];
// pow(2,pow(3,4))
arr2.reduceRight(function(a,b){
return Math.pow(a,b);
});
indexOf()和lastIndexOf()
搜索数组中具有给定值的元素
var arr = [0,1,2,1,0];
arr.indexOf(1); // 返回值为1,arr[1]是1
arr.lastIndexOf(1); // 返回值为3,arr[3]是1
arr.indexOf(1,2); // 返回值为3,arr[3]是1
数组类型
Array.isArray()函数可以用来判断参数是否是数组
Array.isArray([]); // true
Array.isArray({}); // false