多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] # 构造 ## 构造器 ~~~ 1、var list=new Array(); 2、var list=new Array(size); 3、var list=new Array(element0,element1,...elementn); ~~~ ## 字面量方式 ~~~ var Array[element0,element1,...elementn]; ~~~ ~~~ var list[1,true,null,undefined,{x:1},[1,2,3]]; ~~~ # 数组对象属性 |属性 | 作用 | |---------|-------------| |length 属性 | 表示数组的长度,即其中元素的个数| | prototype 属性 |返回对象类型原型的引用| | constructor 属性 |表示创建对象的函数| ## length 属性 通过一些操作来讲解length属性 `var arr=[1,2,3,4,5,6,7,8,9,10];`//定义了一个包含10个数字的数组。 数组的长度属性是可变的 ~~~ alert(arr.length); //显示数组的长度10 arr.length=15; //增大数组的长度,length属性是可变的 alert(arr.length); //显示数组的长度已经变为15 ~~~ ## prototype 属性 `prototype` 属性返回对象类型原型的引用。`prototype` 属性是`object`共有的。 `objectName.prototype` `objectName` 参数是`object`对象的名称。 说明:用 prototype 属性提供对象的类的一组基本功能。 对象的新实例“继承”赋予该对象原型的操作。 对于数组对象,用以下例子说明prototype 属性的用途。 给数组对象添加返回数组中最大元素值的方法。要完成这一点,声明一个函数,将它加入 Array.prototype, 并使用它。 ~~~ function array_max( ) { var i, max = this[0]; for (i = 1; i < this.length; i++) { if (max < this[i]) max = this[i]; } return max; } Array.prototype.max = array_max; var x = new Array(1, 2, 3, 4, 5, 6); var y = x.max( ); ~~~ 该代码执行后,y 保存数组 x 中的最大值,或说 6。 ## constructor 属性 `constructor` 属性表示创建对象的函数。 `object.constructor //object`是对象或函数的名称。 说明:`constructor` 属性是所有具有`prototype` 的对象的成员。它们包括除 `Global` 和 `Math`对象以外的所有`JScript`固有对象。`constructor`属性保存了对构造特定对象实例的函数的引用。 ~~~ x = new String("Hi"); if (x.constructor == String) // 进行处理(条件为真)。 //或 function MyFunc { // 函数体。 } y = new MyFunc; if (y.constructor == MyFunc) // 进行处理(条件为真)。 ~~~ # 对象方法 说明:部分是ECMAScript5的新特性(IE678不支持) |方法 | 作用 | | --------- |-------------| |concat() | 连接两个或者更多的数组,并返回结果| |join() | 将数组的元素组起一个字符串| |pop() | 删除并返回数组的最后一个元素| |push() | 数组末尾添加一个或者多个元素,返回新的长度| |reverse|颠倒数组中元素的顺序| |shift()|删除并返回数组的第一个元素| |slice()|从某个已有的数组返回选定的元素| |sort()|对数组元素排序| |splice() | 删除元素,并向数组添加新元素| |toSource() | 返回该对象的源代码| |toString()|把数组转化为字符串并返回结果| |toLocalString()|把数组转化为本地元素并返回结果| |unshift|向数组开头添加一个或者更多的元素,并返回新的长度| |valueof()|返回数组对象的原始值| |forEach()|遍历数组对象| |map()|对数组做一些映射| |filter()|过滤| |every()|检查判断| |some()|检查判断| |reduce()|两两执行一定的操作| |reduceRight()|从右到左执行操作| |indexOf()|数组检索查找某个元素| |Array.isArray(\[\])|判断是否是数组| ## concat concat作用是拼接数组,需要注意的是也可以把一个数组元素作为拼接的元素,如果这样的话,数组会被拉平,再和其它的元素拼接起来成为新的数组,但是不会被拉平两次,concat不会修改原数组。 ~~~ var arr=[1,2,3,4,5]; arr.concat([10,11],13);//[1,2,3,4,5,10,11,13] arr.concat([1,[2,3]]);//[1,2,3,4,5,1,[1,3]] ~~~ ## slice slice(a,b)a和b可以取负数,表示从a位置开始截取到b位置的一段数组,是一个左闭右开的区间,a和b可以取负数,如果是负数代表倒数第a/b个元素 ~~~ var arr=[1,2,3,4,5]; arr.slice(1,3);//[2,3] arr.slice(1);//[2,3,4,5] arr.slice(1,-1);//[2,3,4] arr.slice(-4,-3);//[2] ~~~ ## splice splice删除元素并向数组添加新元素 `object.splice(a)`从左边开始删除a个元素 `object.splice(a,b)`从a位置开始截取其中的b个元素 `object.splice(a,b,c,d)`从a位置开始截取b个元素,并将c和d或者更多的元素插入原数组 需要注意的是splice会修改原数组 ~~~ var arr=[1,2,3,4,5]; arr.splice(2);//[3,4,5] arr;//[1,2];原数组被修改了 var arr=[1,2,3,4,5]; arr.splice(2,2);//[3,4] arr;//[1,2,5]; var arr=[1,2,3,4,5]; arr.splice(1,1,‘a’,‘b’);//[2] arr;//[1,"a","b",3,4,5]; ~~~ ## foreach foreach()函数从头到尾把数组遍历一遍。有三个参数分别是:数组元素,元素的索引,数组本身 ~~~ var arr = [1, 2, 3, 4, 5]; arr.forEach(function(x, index, a) {//分别对应:数组元素,元素的索引,数组本身 console.log(x + '|' + index + '|' + (a === arr)); }); // 1|0|true // 2|1|true // 3|2|true // 4|3|true // 5|4|true ~~~ ## 常用方法 [https://juejin.im/post/5aab704ef265da239a5f8f52](https://juejin.im/post/5aab704ef265da239a5f8f52) # 自定义排序 ~~~ var list = [ { max:3, avg:2, min:1 }, { max:10, avg:15, min:20 } ]; // 根据max字段对list对象进行排序,从小到大的顺序 // x,y就是要比较的数组的单个元素,这里就是list中的一个元素 // 排序方法主要是要提供一个比较大小的规则,换句话说也就是要说明谁大谁小 // 返回值为true or false function sortByField(x, y) { return x.max - y.max; } console.log(list.sort(sortByField)); ~~~