稀疏数组
稀疏数组是包含从0开始的不连续索引的数组。他的length属性大于数组的个数。例如:
var a = new Array(5) // 数组没有元素,但是length是5 a[1000] = 6 // length属性是1001 var b = [1, 2, 3, 4] delete b[2] // b变成了稀疏数组,但是length不变复制代码
数组方法
-
join()
将所有元素转换成字符串并连接在一起。
var a = [1,2,3] a.join() // 1,2,3 a.join('-') // 1-2-3复制代码
-
reverse()
返回并将所有元素颠倒顺序。
var a = [1,2,3] a.reverse() // [3,2,1] 复制代码
-
sort()
返回并排序的数组元素。如果包含undefined元素,则会排在数组最后。
var a = [2,4,1] a.sort() // [1,2,4] /* 按照一定规则排序 */ a.sort(function(a,b){ return b-a }) // [4,2,1] 复制代码
-
concat()
创建并返回一个新的数组。(不会扁平化数组的数组)
var a = [1,2,3] a.concat(4, 5) // [1,2,3,4,5] a.concat([4,5]) // [1,2,3,4,5] a.concat([4,5],[6,7]) // [1,2,3,4,5,6,7] a.concat([4,[5,6]) // [1,2,3,4,[5,6]]复制代码
-
slice()
返回指定数组的一个片段或子数组。参数负数表示倒数。
var a = [1,2,3,4,5] a.slice(0,2) // [1,2] a.slice(-3,-1) // [4,5]复制代码
-
splice()
在数组中插入或删除元素。与slice()不同的是,splice()会修改调用的元素。该方法第一个参数指定插入或删除的位置。第二个参数指定了应该删除的个数。如果省略了第二个参数,则起始点到结尾的元素全部都会删除。
var a = [1,2,3,4,5,6] a.splice(1,3) // a是[1,5,6],返回的是[2,3,4] var b = [1,2,3,4,5,6] b.splice(1,2,4,6) // b是[1,4,6,4,5,6],返回的是[2,3] 复制代码
-
push()/pop() unshift()/shift()
在ECMAScript 5中的数组方法
ES5中数组方法都不会修改调用的原始数组。
-
forEach()
遍历数组。
var array = [1,2,3,4,5] array.forEach(function(item,index,a){ console.log(item) // 数组的元素 console.log(index) // 数组的索引 console.log(a) // 数组本身 }) 复制代码
但是,该方法不能用break语句终止遍历,必须把forEach()方法放在一个try块中,并且抛一个异常。
function foreach(a,f,t){ try { a.forEach(f,t) } catch(e) { if (e=== foreach.break) return; else throw e; } } foreach.break = new Error('StopIteration')复制代码
-
map()
将调用的数组的每个元素传递给指定的元素,并且返回一个数组。如果调用的数组是稀疏数组,则返回的也是稀疏数组。它具有相同的长度,相同的缺失元素。
var a = [1,2,3] var b = a.map(function(item){ return item*item }) // b是[1,4,9]复制代码
-
filter()
该方法返回的数组是调用数组的一个子集。根据调用函数的返回值是true和false来判断的。该方法会跳过稀疏数组中缺少的元素,他返回的数组总是稠密的。
var a = [1,2,3,4,5] var b = a.filter(function(x){ return x<3 }) // b是[1,2] 复制代码
-
some() 和 every()
这两个方法是数组的逻辑判断。根据传入的函数逻辑判断,返回true和false。
every()方法是当数组中所有元素调用判断函数都返回true时,返回true every()方法是当数组中至少有一个元素调用判断函数都返回true时,返回truevar a = [1,2,3,4,5] a.erery(function(item){ return a < 10 }) // 返回true a.some(function(item){ return a < 2 }) // 返回true复制代码
该方法具有短路功能。every()当返回值有false时停止遍历。some()当返回值有true()时停止遍历。
-
reduce() 和 reduceRight()
使用指定的函数将数组元素进行组合,生成单个值。这在函数式编程中常见。也可以被称为“注入”和“折叠”。
reduce()需要两个参数,第一个是执行化简参数的函数。第二个是传给函数的初始值,省略的话,即是数组的第一个元素。空数组不传第二个参数会报错。
var a = [1,2,3,4] var sum = a.reduce(function(x,y){ return x+y},0) // 数组求和 var product = a.reduce(function(x,y){ return x*y},1) // 数组求积 var max = a.reduce(function(x,y){ return (x>y)?x:y}) // 求最大值复制代码
reduceRight()与reduce()类似,但是他是按照索引从大到小进行处理数组的。
-
indexOf()和lastIndexOf()
搜索整个数组中给定值得元素,返回第一个找到元素的索引,没有找到就返回-1。indexOf()是从头至尾搜索,lastIndexOf()是反向搜索。
数组类型
在es5中有Array.isArray()方法。
兼容性写法:
var isArray = Function.isArray || function(o){ return typeof o === 'object' && Object.prototype.toString.call(o) === ["object Array"] }复制代码
类数组对象
拥有数组方法的对象。