创建数组
- 数组直接量的语法允许有可选的结尾的逗号,故[,,]只有两个元素而非三个。
- 调用构造函数Array()是创建数组的另一种方法。可以用三种方式调用构造函数
- 调用时没有参数(创建一个没有任何元素的空数组,等同于数组直接量[])
var a = new Array()
复制代码
- 调用时有一个数值参数,它指定长度(注意数组中没有存储值,甚至数组的索引属性"0"、"1"等还未定义)
var a = new Array(10)
复制代码
- 显示指定两个或多个数组元素或者数组的一个非数值元素
var a = new Array(5,4,3,"test")
复制代码
数组长度
- 设置数组的length属性为一个小于当前长度的非负整数n时,当前数组中那些索引值大于或等于n的元素将从中删除。
数组的添加和删除
- 可以像删除对象属性一样使用delete运算符来删除数组元素
a = [1,2,3]
delete a[1] // a在索引1的位置不再有元素
1 in a // false 数组索引1并未在数组中定义
a.length // 3 delete操作并不影响数组长度
复制代码
- delete不会修改数组的length属性,也不会将元素从高索引处移下来填充已删除属性留下的空白。
数组方法
join
- 将数组所有元素都转化为字符串并连接在一起,返回最后生成的字符串。可以指定一个字符串作为分隔数组的各个元素。不指定默认使用逗号。
var a = [1,2,3]
a.join() // "1,2,3"
a.join('-') // "1-2-3"
复制代码
- 该方法是String.split()方法的逆向操作,后者是将字符串分割成若干块来创建一个数组。
reverse
- 将数组中的的元素颠倒顺序,返回逆序的数组。(不创建新的数组,而是原先的数组中重新排列他们)
var a = [1,2,3]
a.reverse().join() // "3,2,1",并且现在的a是[3,2,1]
复制代码
sort
- 将数组中的元素排序并返回排序后的数组。当不带参数调用sort()时,数组元素以
字母表顺序
排序 - 如果数组包含undefined元素,它们会被排到数组的尾部。为了按照其他方式而非字母表顺序进行数组排序,必须给sort()方法传递一个比较函数。(return a-b 从小到大,return b-a 从大到小)
var a = [33,4,1111,222]
a.sort() // 字母表顺序 1111,222,33,4
a.sort(function(a,b){ // 4,33,222,1111
return a-b;
})
a.sort(function(a,b){
return b-a; // 数值大小相反的顺序
})
复制代码
concat
- 创建并返回一个新数组,它的元素包括调用concat()的原始数组的元素和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,7]]) // [1,2,3,4,5,[6,7]]
复制代码
slice
- 返回指定数组的一个片段或子数组。返回的数组包含第一个参数指定的位置和所有到但不含第二个参数指定的位置之间的所有数组元素。
- 参数中出现负数,它表示相对于数组中最后一个元素的位置。例如,参数-1指定了最后一个元素
splice
- 在数组中插入或删除元素的通用方法。返回删除的数组。
var a = [1,2,3,4,5,6,7,8]
a.splice(4) // 返回[5,6,7,8] a是[1,2,3,4]
a.splice(1,2) // 返回[2,3] a是[1,4]
a.splice(1,1) // 返回[4] a是[1]
var a = [1,2,3,4,5]
a.splice(2,0,'a','b') // 返回[] a是[1,2,'a','b',3,4,5]
a.splice(2,2,[1,2],3) // 返回['a','b'] a是[1,2,[1,2],3,3,4,5]
复制代码
- 区别于concat(),splice()会插入数组本身而非数组的元素。
push和pop
- 数组的尾部添加和删除。push返回数组的长度,pop返回删除的一项组成的数组。
unshift和shift
- 数组的前部添加和删除。unshift返回数组的长度,shift返回删除的一项组成的数组。
- 当使用多个参数调用unshift时,参数是一次性插入的而非一次一个地插入。
var a = [];
a.unshift(1) // [1]
a.unshift(3,[4,5]) // [3,[4,5],1]
复制代码
reduce和reduceRight
- reduce和reduceRight方法使用指定的函数将数组元素进行组合,生成单个值。第一个参数是执行化简操作的函数,第二个(可选)的参数是一个初始值
var a = [1,2,3,4,5]
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})
复制代码
// 在数组中查找所有出现的x,并范回一个包含匹配索引的数组
function findall(a,x){
var result = [],
len = a.length,
pos = 0;
while(pos<len){
pos = a.indexOf(x,pos);
if(pos===-1) break;
result.push(pos);
pos = pos + 1;
}
return result;
}
复制代码