关于js中的数组

数组、字符串、数字是一个程序的最基本的组成部分,对于程序员来说,理解他们只是基本操作,今天说说数组

和其他强类型语言不同,数组可以容纳任何类型的值,字符串、数字、对象,也可以是其他数组(多维数组就是这样用的),并且js的数组可以像对象一样任意拓展(事实上数组就是对象)

而不像其他强类型语言一样需要预设长度。

 声明数组的方式

1、var a=[1,2,'b']

2、var a = new Array(3);//可以不带new,不带new会自动补上

  a[0]=1

  a[1]=2;

  a[2]='b'

3、var a = new Array(1,2,'b')

最常用的当然是第一种。

稀疏数组:稀疏数组就是含有空缺单元的数组,使用时要特别注意,空缺单元默认被定义为undefined,有的时候可能会出现意料不到的后果,比如不同的浏览器对空单元的处理是不一样的

        另外你可以试试以下代码在不同浏览器下的结果

var a =[ ]; a.length=3; console.log(a)

var b=new Array(3);   console.log(b);

var c=[undefined,undefined,undefined]; console.log(c);

总之,尽量不要用。

还有一个比较有趣的地方;数组也是对象,所以他们也可以包含键值和属性,但是要注意这些并不会被计算在length中

var a = [ ]

a[0]=0; a['text']='Hello'; 

console.log(a.length)    // 1

a.text // Hello

a['text'] //Hello

另外还有一点,如果键值可以被强制类型转换字符串的话,他就会被当做数字索引来处理。

这虽然有趣但是尽量不要在数组中使用这种方式,这是对象该做的事,数组是用来存放元素的。

数组方法

(1)join()方法:接收一个参数,即用作分隔符的字符串,然后返回包含所有数组项的字符串
(2)push()方法:接收任意数量的参数,把它们逐个添加到数组末尾,并返回修改后数组的长度
(3)pop()方法:从数组末尾移除最后一项,减少数组的length值,然后返回移除的项
(4)shift()方法:移除数组中第一个项并返回改项,同时将数组长度减1
(5)unshift()方法:在数组前端添加任意个项并返回新数组的长度
(6)sort()方法:对数组中的数据进行排序
(7)concat()方法:可以基于当前数组中的所有项创建一个新数组
(8)slice()方法:基于当前数组中的一或多个项创建一个新数组
(9)indexOf()方法:从数组的开头(位置0)开始向后查找
(10)lastIndexOf():从数组的末尾开始向前查找
(11)splice()方法:恐怕要算是最强大的数组方法了,它有很多种用法,splice()的主要用途是向数组的中部插入项,但使用这种方法的方式则有如下3种:

    删除:可以删除任意数量的项,只需指定2个参数(要删除的第一项的位置和要删除的项数),例如:splice(0,2)会删除数组中的前两项

    插入:可以向指定位置插入任意数量的项,只需要提供3个参数(起始位置,0(要删除的项数)和要插入的项),例如:splice(2,0,"red","green")会从当前数组的位置2开始插入字符串"red"和"green"

    替换:可以向指定位置插入任意数量的项,且同时删除任意数量的项,只需要提供3个参数(起始位置,要删除的项数和要插入的任意数量的项),例如:splice(2,1,"red","green")会删除当前数组位                             2置                  的项,然后再从位置2开始插入字符串"red"和"green";

(12)map()方法:map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。

(13)filter()方法:filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。

具体的可以参考https://www.cnblogs.com/ToNi/p/4267463.html

类数组

类数组也就是说不是真正的数组但是十分类似,比如DOM查询返回的节点,比如用来存放函数的参数的arguments对象(ES6废止了)

这些类数组可以通过下标的方式访问元素,但是没有诸多的数组的方法,这时可以利用数组方法进行转换

经常用的是slice(...)

function foo(){

  var arr = Array.prototype.slice.call(arguments);

  arr.push('abc')

  console.log(arr)   

}

foo('baz','bar')  //['baz','bar','abc']

ES6的内置函数Array.from(...)也能实现同样的功能;

 

posted @ 2018-08-12 00:26  hui-fly  阅读(209)  评论(0编辑  收藏  举报