[关闭]
@15152278073 2018-03-28T06:37:22.000000Z 字数 2907 阅读 525

Array类型

JS


除了Object外,Array类型恐怕是最常用的类型了.Js中数组不但是有序列表,且每一项可以保存任何数据类型.Js的数组大小是可以动态调整的,即可以随着数据的添加自动增长以容纳新数据.

创建数组的基本方式有两种.
第一种方法:使用Array的构造函数.

  1. var colors = new Array();
  2. //如果知道长度,也可以预先传递长度
  3. var colors = new Array(20);
  4. //也可以传递数组初始化
  5. var colors = new Array("red", "blue", "green");
  6. //可以省略new关键字
  7. var colors = Array(3) //长度为3的数组
  8. var names = Array("json") //创建包含一项,即字符串json

第二种方法:使用数组字面量表示法.数组字面量由一对包含数组的方括号表示,多个数组直接以逗号分割.

  1. //字面量
  2. var colors = ["red", "blue", "green"];
  3. var names = [] //创建一个空数组
  4. var values = [1,2,] //不要这样,会创建一个包含2或3项的数组
  5. var ops = [,,,,,] //不要这样,会创建包含5或6项的数组

读取和设置数组的值时,要使用方括号的索引值.

  1. var colors = ["red", "blue", "green"];
  2. console.log(colors[0]); //打印第一项
  3. colors[2] = "black" //修改第三项
  4. colors[3] = "brown" //新增第四项

数组的length很有特点----它不是只读的.可以通过设置这个属性,从数组的末尾移除或者添加新的项.

  1. //lenth
  2. var colors = ["red", "blue", "green"];
  3. colors.length = 2
  4. console.log(colors[2]) //undefined
  5. var colors = ["red", "blue", "green"];
  6. colors.length = 5
  7. console.log(colors[4]) //undefined

一开始colors有三项,将length设置为2后,会移除最后一项,在访问就是undefined了.如果这种大于长度的值,则会扩容到length的长度,且每一项都为undefined.

利用length可以方便的在末尾添加新项.设置了length后,会重新计算length.

  1. var colors = ["red", "blue", "green"];
  2. colors[colors.length] = "black" //添加'black' ,index 为3
  3. colors[colors.length] = "white" //添加'white' ,index 为4

点击此处查看具体文档

检测数组

确定某个对象是不是数组的经典问题.
如果是一个网页或者全局作用域,使用instanceof操作符就能得到结果,.但是如果网页中包含多个和框架,即有多个全局环境,从而存在多个Array构造函数.如果从一个框架传入另一个框架,那么就有两个不同的构造函数.

为了解决这个问题,ES5新增了Array.isArray()方法.它可以解决上述问题.

栈方法

数组的行为可以表现的向栈一样.栈是一种LIFO(Last-In-First-Out,后进先出)的数据结构,最先加入的项最早被移除.栈中的插入(推入:push())和移除(弹出pop())只发生在栈的顶部.如下:

  1. //push pop
  2. var colors = new Array();
  3. var count = colors.push("red" , "blue");
  4. console.log(count); //2
  5. var count = colors.push("black");
  6. console.log(count); //3
  7. var item = colors.pop()
  8. console.log(item); //black
  9. console.log(colors.length); //2

队列方法

数组还是一种队列的数据结果,其访问规则是FIFO(Fisrt-IN-First-Out,先进先出).队列在末尾添加项,在前端移除项.前端移除项的方法为shift,它能够移除数组的第一项,同时将长度减一.

  1. //shift
  2. var colors = new Array();
  3. var count = colors.push("red" , "blue");
  4. console.log(count); //2
  5. var count = colors.push("black");
  6. console.log(count); //3
  7. var item = colors.shift()
  8. console.log(item); //red
  9. console.log(colors.length); //2

排序方法

1.reverse()方法会翻转数组的顺序.

  1. //sort
  2. var values = [0,1,5,10,15]
  3. values.reverse()
  4. console.log(values) //[15,10,5,1,0]

2.sort()方法:按升序排列数组.

  1. //sort
  2. var values = [0,1,5,10,15]
  3. values.sort()
  4. console.log(values) //[0, 1, 10, 15, 5]

发现在进行的是字符串比较.不服和需求.所有sort()可以接收一个比较参数.

  1. function compare(a,b){
  2. if(a<b) return -1;
  3. if(a>b) return 1;
  4. return 0;
  5. }
  6. values.sort(compare)
  7. console.log(values) //[0, 1, 10, 15, 5]

如果是降序,则对调比较函数的返回值即可.

  1. function compare(a,b){
  2. if(a<b) return 1;
  3. if(a>b) return -1;
  4. return 0;
  5. }
  6. values.sort(compare)
  7. console.log(values) //[15, 10, 5, 1, 0]

操作方法

1.contact()方法:基于当前数组的所有项创建一个新数组.源数组保持不变.

2.slice()方法:基于当前的一项或多项创建一个新的数组.该方法不会影响原数组.例如:

  1. //sclice
  2. var colors = ["red","green","blue","yellow","purple"]
  3. var colors2 = colors.slice(1) //["green","blue","yellow","purple"]
  4. var colors3 = colors.slice(1,4) //["green","blue","yellow"]

3.splice()方法,他有很多种用法.

迭代方法

缩小方法

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注