数组API详解:
一,基础:
1.1数组的创建:
两种方法:直接量和构造函数。
var arr = [1,2,3]//直接量形式
直接量构建数组,数组里的元素可以是任意类型的值。甚至可以是表达式和函数等。
var arr = new Array(3)//这里的意思是在内存中分配一个大小为三的存储空间,里面没有任何值,甚至索引都没有规定,而arr只是这个没有任何值的空间的地址引用。
var arr = new Array(1,2,3,4)//这样才是来创建一个数组,而数组的元素是1,2,3,4四个元素。
推荐用直接量来定义数组。
1.2数组的读写:
arr[index]
来读取数组中规定的元素的值。index
代表数组中的索引。因为数组是对象的特殊形式,所以当你使用一个不合法的字符或者数字当索引的时候,数组会自动把它当自己的属性名,此时的数组相当于一个对象。
1.3稀疏数组:
稀疏数组就是包含从0
开始的的不连续索引
的索引。例如:
var arr = new Array(4)
arr[3] = 12
//此时的arr就是一个稀疏数组。
1.4数组的长度:
每一个数组都有一个length
属性,该属性的作用是来描述该数组中的元素的个数,准确的来说是描述数组开辟单位空间的个数,因为有稀疏数组的存在。我们可以用length
属性来扩充和删除数组。
var arr = [1,2,3,4,5]
arr.length = 3
console.log(arr)
//[1,2,3]
arr.length = 3
表示让该数组的元素只剩下三个。当我们扩充数组的时候:
arr.length = 7
此时该数组是一个稀疏数组,因为此时的数组后几个只分配了空间,并没有赋值。
1.5数组的添加和删除:
我们可以直接来声明新的索引来赋新值,如:
var arr = [1,2,3]
arr[3] = 4//此时的数组就是[1,2,3,4]
//我们也可以通过改变length来删除元素
但是我们最常用的不是这种方式。我们用四个 方法来对数组进行删除和添加。
push/pop
,shift/unshift
。我们后面将会讲到。
1.6数组的遍历:
我们常用的数组遍历有两种:for循环和for/in循环。后面还会讲到forEach()
函数
for循环是我们比较熟知的,我们这里讲一下for/in循环:
for(var key in arr){
console.log(arr[key])
}
该循环用来打印数组中的元素,key
是数组的索引,for/in循环
会跳过稀疏数组中空白的部分。
1.7数组方法:
-
sort(function(a,b){})
该函数的所用是将数组中的元素进行排序,然后返回排序后的数组。当我们不传入任何参数,那么
sort
将把数组中的元素以字母表的顺序排序(如果有必要会将值临时转化为字符串进行比较)。如果数组包含undifine
,那undifine
将会排到最后。大多数时候我们并不需要使用字母表的顺序,那我们就必须要传入一个比较函数。实例如下:var arr = [1,3,2,4,6,3,4] arr.sort(function(a,b){ })
我们传入了一个比较函数,比较函数有两个形参,当我们调用sort函数的时候,该函数会把要匹配的两个值传给a,b。他是两个两个的比,如1和2,2和3,3和4这种形式,我们使用这个函数的目的是将两个传入值交换在数组的位置,就是这两个值谁前谁后的问题。如果比较函数返回的值小于零,那么这两个值就不交换位置,如果返回的值大于零,那么就交换位置,等于零,说明两个值相等,我们就不用交换。记住,是返回值决定交不交换位置。此时我们就可以按顺序来排数了:
var arr = [1,3,2,4,6,3,4] arr.sort(function(a,b){ return a - b })
如果比较函数的返回值是
a - b
,那么最后数组的值一定是从小到大排,因为当a>b
,那么返回值一定大于0,则两个值会交换位置,会把大的值放置在后面。如果我们想从大到小,我们就可以返回b - a
。 -
reverse()
该方法是将数组的元素倒置,并返回倒置后的数组,意思就是说它可以改变数组。
-
join(char)
该函数的作用是将数组中的元素用一种方式连接起来。该函数返回的是连接后的字符串。如果我们不传入参数,就默认使用
,
来连接,比如:var arr = [1,2,3,4] console.log(arr.join("-")) //"1-2-3-4"
我们想用什么字符连接数组中的元素,就将改字符传入到
join
函数就可以了。 -
concat(val,val…)
concat
函数的用法如下:var arr = [1,2,3] arr.concat(4,5)//返回[1,2,3,4,5] arr.concat([4,5])//返回[1,2,3,4,5] arr.concat(4,[[5]])//返回[1,2,3,4,[5]]
concat
函数创建并返回一个新数组,新数组的元素包含有原始的数组元素和传入到该函数中的参数。但是如果传入该函数的是数组,那么连接的是数组内的元素,而并非是数组本身,**该函数不会递归扁平化数组的数组。**当然,传入的值可以是任意值,对象,数组等。concat
其实也是变相的添加元素,只不过可以批量添加。 -
slice(start,end)
slice
函数返回一个新数组,该数组内的元素是原数组中的部分元素。我们可以向该数组传入数字,表示我们要复制原数组中的哪些元素,所以不会改变原数组。截取的规律是:含start不含end,只传一个则该值为起点一直截取到最后