引用类型(二):Array类型
一、js中的数组与其它语言中的数组的区别
1、ECMAScript数组的每一项可以保存任何类型的数据
2、ECMAScript数组的大小是可以动态调整的
二、创建数组的基本方式
1、使用Array构造函数
var colors = new Array(); var colors = new Array(20); //知道长度的情况下 var colors = new Array('red','blue','green');//知道包含的项var
*:也可以省略new
var colors = Array(3);
2、数组字面量表示法。多个数组项之间以逗号隔开
var colors = ['red','blue','green']; //创建一个包含3个字符串的数组 var name = []; //创建一个空数组
三、数组的特点
1、数组的length属性很有特点-它不是只读的。因此,通过设置这个属性,可以从数组的末尾移除项或向数组中添加新项
eg1:移除项
var colors = ['red','blue','green']; colors.length = 2; console.log(colors);
eg2:增加项
var colors = ['red','blue','green']; colors.length = 4; console.log(colors);
2、数组是有限的,数组最多可以包含 4 294 967 295 个项,如果超过这个上限值,就会发生异常
四、检测数组
1、if(value instanceof Array){}
问题:它假定只有一个全局执行环境。如果网页中包含多个框架,那实际上就存在两个以上不同的全局执行环境,从而存在两个以上不同版本的Array构造函数。
如果你从一个框架向另一个框架传入一个数组,那么传入的数组与第二个框架中原生创建的数组分别具有鸽子不同的构造函数
2、if(Array.isArray(value)){}
五、转换方法
var colors = ['red','blue','green']; console.log(colors.toString()); //"red,blue,green" console.log(colors.valueof()); //['red','blue','green'] console.log(colors); //['red','blue','green'] alert(colors.toString()); //"red,blue,green" alert(colors.valueof()); //"red,blue,green" alert(colors); //"red,blue,green"
六、数组的栈方法
数组可以表现得就像栈一样,后者是一种可以限制插入和删除项的数据结构。栈是一种先进后出,后进先出的数据结构
push()方法可以接收任意数量的参数,把它们逐个添加到数组末尾,并返回修改后数组到长度。
pop()方法则从数组末尾移除最后一项,减少数组到length值,然后返回移除的项
var colors = new Array(); colors.push('red','green'); console.log(colors); //red,green colors.pop(); console.log(colors); //red
七、数组的队列方法
队列数据结构的访问规则是先进先出,队列在列表的末端添加项,从列表的前端移除项
push()方法可以接收任意数量的参数,把它们逐个添加到数组末尾,并返回修改后数组到长度。
shift()方法移除数组中的第一个项并返回该项,同时将数组长度减1.
var colors = new Array(); colors.push('red','green'); console.log(colors); // red,green colors.shift(); console.log(colors); // green
pop()方法则从数组末尾移除最后一项,减少数组到length值,然后返回移除的项
unshift()方法在前端添加项
var colors = new Array(); colors.unshift('red','green'); console.log(colors); //red,green colors.pop(); console.log(colors); //red
八、重排序方法
reverse()方法会反转数组项的顺序。
var values = [1,2,3,4,5]; values.reverse(); console.log(values); //5,4,3,2,1
sort()方法按升序排列数组项-即最小的值位于最前面,最大的值排在最后吗。
升序
function compare(value1,value2){ if(value1 < value2){ return -1; }else if(value1>value2){ return 1; }else{ return 0; } } var values = [0,1,5,10,15]; values.sort(compare); console.log(values); //0,1,5,10,15
降序
function compare(value1,value2){ if(value1 < value2){ return 1; }else if(value1>value2){ return -1; }else{ return 0; } } var values = [0,1,5,10,15]; values.sort(compare); console.log(values); //15,10,5,1,0
九、操作方法
1、concat()方法基于当前数组中的所有项创建一个新数组
var colors = ['red','green','blue']; var colors2 = colors.concat('yellow',['black','brown']) console.log(colors); console.log(colors2);
2、slice()方法能够基于当前数组中一或多个项创建一个新数组。slice()方法可以接受一或两个参数,即要返回项的起始和结束位置。
var colors = ['red','green','black','blue','purple']; var colors2 = colors.slice(1); var colors3 = colors.slice(1,4); console.log(colors2); console.log(colors3); var colors3 = colors.slice(1,4,'orange','yellow')
十、位置方法
1、indexOf(),lastIndexOf()方法接收两个参数,要查找的项和可选的表示查找起点位置的索引
var numbers = [1,2,3,4,5,4,3,2,1]; //indexOf,从左往右,查找第一个位置 console.log(numbers.indexOf(4)); //3 //lastIndexOf()从左往右查找最后出现的位置 console.log(numbers.lastIndexOf(4)); //5
十一、迭代方法
1、every():对数组对每一项运行给定函数,如果函数对每一项都返回true,则返回true
var numbers = [1,2,3,4,5,4,3,2,1]; var everyResult = numbers.every(function(item,index,array){ return item>2 }) console.log(everyResult); //false
2、some():对数组中对每一项运行给定函数,如果函数对任何一项返回true,则返回true
var numbers = [1,2,3,4,5,4,3,2,1]; var everyResult = numbers.some(function(item,index,array){ return item>2 }) console.log(everyResult); //true
3、filter():对数组中对每一项运行给定函数,返回该函数会返回true的项组成的数组
var numbers = [1,2,3,4,5,4,3,2,1]; var everyResult = numbers.filter(function(item,index,array){ return item>2 }) console.log(everyResult); //[3,4,5,4,3]
4、map():对数组中对每一项运行给定函数,返回每次函数调用对结果组成对数组
var numbers = [1,2,3,4,5,4,3,2,1]; var everyResult = numbers.map(function(item,index,array){ return item*2 }) console.log(everyResult); //[2,4,6,8,10,8,6,4,2]
5、forEach():对数组中对每一项给定函数,这个方法没有返回值
var numbers = [1,2,3,4,5,4,3,2,1]; var everyResult = numbers.forEach(function(item,index,array){ //执行某些操作 })
十二:归并方法
1、reduce()和reduceRight()。这两个方法都会迭代数组都所有项,然后构建一个最终返回都值。reduce()方法从数组都第一项开始
逐个遍历到最后。而reduceRigth()则从数组到最后一项开始,向前遍历到第一项
eg1:
var values = [1,2,3,4,5]; var sum = values.reduce(function(prev,cur,index,array){ return prev + cur; }) console.log(sum); //15
eg2:
var values = [1,2,3,4,5]; var sum = values.reduceRight(function(prev,cur,index,array){ return prev + cur; }) console.log(sum); //15