一、创建数组
var a = [,,]; //数组有2个元素
var a = new Array(10); //指定长度
二、稀疏数组
从0开始的不连续索引的数组。可以使用Array()构造函数或简单指定数组的索引大于数组长度来创建。
var a1 = [,,,]; //数组是[undefined, undefined, undefined]
var a2 = new Array(3); //没有元素
delete 删除数组元素不会修改length,数组变成稀疏数组
三、数组遍历
function Traversal(o){
var keys = Object.keys(o);
var values = [];
for (var i = 0;
i < keys.length; i++){
var key = keys[i];
values[i] = o[key];
}
return values;
}
跳过 null undefined 不存在的元素
if(!a[i]) continue;
跳过 undefined 不存在的元素
if(a[i] === undefined) continue;
只跳过不存在的元素
if(! i in a) continue;
使用 for in 处理稀疏矩阵
每次遍历将一个可枚举属性名赋值给循环变量
var a = [1,,2,3];
var b = [];
var pos = 0;
for(var index in a) {
b[pos++] = a[index];
}
四、多维数组
var table = new Array(10);
for(var i = 0;
i < table.length; i++) {
table[i] = new Array(10);
}
//初始化
for(i = 0; i < table.length; i++) {
for(j=0; j < table[i].length; j++) {
table[i][j] = i * j;
}
}
五、数组方法
join()
将数组所有元素转化为字符串连在一起,返回生成的字符串,可以指定一个字符串分隔各个元素,不指定默认使用逗号
reverse()
将数组的元素颠倒顺序,返回逆序数组。 在原先的数组中重新排列它们
sort()
将数组的元素排序并返回排序后的数组,不带数组调用时以字母表顺序排序,如果包含undefined,会被排到数组末尾。
给sort()传递一个比较参数。假设第一个参数应该在前,比较函数返回一个小于0的值。
a.sort(function (a,b) { return a-b}); //数值大小
a.sort(function (a,b) {
var c = a.toLowerCase();
var d = b.toUpperCase();
if (c < d) return -1;
if (c > d) return 1;
});
concat()
创建并返回一个新数组,它的元素包括调用concat() 的原数组和提供的参数。如果有数组,则连接的是数组的元素。
slice()
返回指定数组的片段或子数组,两个参数分别指定开始和结束的位置(不包含)。负数表示相对于最后元素的对应位置,不会修改数组。
splice()
能从数组删除元素、插入元素,完成操作后数组元素改变索引值。第一个参数指定起始位置,第二个参数指定从元素中删除的元素的数量,如果省略第二个参数,则从起始位置后全部删除。第三个参数开始指定在第一个参数指定的位置要插入的元素。
push() pop()
将数组当做栈使用,返回数组新长度
unshift() shift()
unshift()在数组头部添加或删除元素,将剩余元素前移,返回数组新长度。使用多参数调用 unshift()是一次性插入 shift()删除数组第一个元素并返回,把剩余元素下移
toString() toLocaleString()
toString()将每个元素转换为字符串,用逗号分隔
六、ECMAScript5的数组方法
forEach() 遍历
为每个参数调用指定的函数。要提前终止需要把forEach()放在try并能抛出异常。
map() 映射
将每个元素传递给指定函数,返回一个数组,包含该函数的返回值。传递给map()的函数应该有返回值。 返回的是新数组,不修改原数组
var a = [1,2,3];
b = a.map(function (x){return x*x;});
filter() 过滤
返回元素的子集,如果返回值为true或能转化为true,则添加到返回的数组。会跳过稀疏数组缺少的元素。
var a = [1,2,3,4,5];
a.filter(function (x){return x%2==0});
every() some()
检测 every() 当且仅当数组所有元素调用函数都返回true,才返回true some() 只要至少有一个元素调用函数返回true,就返回true 一旦every()或some()确定该返回什么值时就停止遍历
reduce() reduceRight() 简化
使用指定的函数将数组元素组合,生成单个值。 第一个参数把两个值组合或化简为一个值,返回化简后的值。第二个参数(可选)传递给函数的初始值。 reduceRight()按照数组索引从右到左
indexOf() lastIndexOf()
搜索 搜索给定值的元素,返回找到的第一个元素的索引,没有则返回-1,lastIndexOf()从最后开始。第二个参数(可选)表示从该位置开始,可以是负数。 //返回数组所有元素匹配值的索引
function findall(a, x) {
var results = [],
len = a.length,
pos = 0;
while(pos < len) {
pos = a.indexOf(x,pos);
if(pos === -1) break;
results.push(pos);
pos = pos + 1;
}
return results;
}
七、检测数组
var isArray = Function.isArray || function (o) {
return typeof o === "object" &&
Object.prototype.toString.call(o) === "[object Array]";
}